/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * GenerateVpnConnectionDefaultHealthCheckIp request structure.
 * @class
 */
class GenerateVpnConnectionDefaultHealthCheckIpRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPN gateway ID, such as `vpngw-1w9tue3d`
         * @type {string || null}
         */
        this.VpnGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

    }
}

/**
 * CreateNetworkAcl response structure.
 * @class
 */
class CreateNetworkAclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance
         * @type {NetworkAcl || null}
         */
        this.NetworkAcl = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkAcl) {
            let obj = new NetworkAcl();
            obj.deserialize(params.NetworkAcl)
            this.NetworkAcl = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Network ACL
 * @class
 */
class NetworkAcl extends  AbstractModel {
    constructor(){
        super();

        /**
         * `ID` of the `VPC` instance.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * `ID` of the network ACL instance.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Name of the network ACL. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.NetworkAclName = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Array of subnets associated with the network ACL.
         * @type {Array.<Subnet> || null}
         */
        this.SubnetSet = null;

        /**
         * Inbound rules of the network ACL.
         * @type {Array.<NetworkAclEntry> || null}
         */
        this.IngressEntries = null;

        /**
         * Outbound rules of the network ACL.
         * @type {Array.<NetworkAclEntry> || null}
         */
        this.EgressEntries = null;

        /**
         * Network ACL type. Valid values: `TRIPLE` and `QUINTUPLE`.
         * @type {string || null}
         */
        this.NetworkAclType = null;

        /**
         * Tag key-value pairs
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.NetworkAclName = 'NetworkAclName' in params ? params.NetworkAclName : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.SubnetSet) {
            this.SubnetSet = new Array();
            for (let z in params.SubnetSet) {
                let obj = new Subnet();
                obj.deserialize(params.SubnetSet[z]);
                this.SubnetSet.push(obj);
            }
        }

        if (params.IngressEntries) {
            this.IngressEntries = new Array();
            for (let z in params.IngressEntries) {
                let obj = new NetworkAclEntry();
                obj.deserialize(params.IngressEntries[z]);
                this.IngressEntries.push(obj);
            }
        }

        if (params.EgressEntries) {
            this.EgressEntries = new Array();
            for (let z in params.EgressEntries) {
                let obj = new NetworkAclEntry();
                obj.deserialize(params.EgressEntries[z]);
                this.EgressEntries.push(obj);
            }
        }
        this.NetworkAclType = 'NetworkAclType' in params ? params.NetworkAclType : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

    }
}

/**
 * ModifyAddressTemplateAttribute response structure.
 * @class
 */
class ModifyAddressTemplateAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Protocol port template group
 * @class
 */
class ServiceTemplateGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port template group instance ID, such as `ppmg-2klmrefu`.
         * @type {string || null}
         */
        this.ServiceTemplateGroupId = null;

        /**
         * Protocol port template group name.
         * @type {string || null}
         */
        this.ServiceTemplateGroupName = null;

        /**
         * Protocol port template instance ID.
         * @type {Array.<string> || null}
         */
        this.ServiceTemplateIdSet = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Protocol port template instance information.
         * @type {Array.<ServiceTemplate> || null}
         */
        this.ServiceTemplateSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateGroupId = 'ServiceTemplateGroupId' in params ? params.ServiceTemplateGroupId : null;
        this.ServiceTemplateGroupName = 'ServiceTemplateGroupName' in params ? params.ServiceTemplateGroupName : null;
        this.ServiceTemplateIdSet = 'ServiceTemplateIdSet' in params ? params.ServiceTemplateIdSet : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.ServiceTemplateSet) {
            this.ServiceTemplateSet = new Array();
            for (let z in params.ServiceTemplateSet) {
                let obj = new ServiceTemplate();
                obj.deserialize(params.ServiceTemplateSet[z]);
                this.ServiceTemplateSet.push(obj);
            }
        }

    }
}

/**
 * CreateRoutes request structure.
 * @class
 */
class CreateRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route table instance ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Routing policy object.
         * @type {Array.<Route> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new Route();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * DescribeHaVips response structure.
 * @class
 */
class DescribeHaVipsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * `HAVIP` object array.
         * @type {Array.<HaVip> || null}
         */
        this.HaVipSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.HaVipSet) {
            this.HaVipSet = new Array();
            for (let z in params.HaVipSet) {
                let obj = new HaVip();
                obj.deserialize(params.HaVipSet[z]);
                this.HaVipSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Statistics on the instances associated with the security group
 * @class
 */
class SecurityGroupAssociationStatistics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group instance ID.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Number of CVM instances.
         * @type {number || null}
         */
        this.CVM = null;

        /**
         * Number of TencentDB for MySQL instances
         * @type {number || null}
         */
        this.CDB = null;

        /**
         * Number of ENI instances.
         * @type {number || null}
         */
        this.ENI = null;

        /**
         * Number of times a security group is referenced by other security groups
         * @type {number || null}
         */
        this.SG = null;

        /**
         * Number of load balancer instances.
         * @type {number || null}
         */
        this.CLB = null;

        /**
         * The binding statistics for all instances.
         * @type {Array.<InstanceStatistic> || null}
         */
        this.InstanceStatistics = null;

        /**
         * Total count of all resources (excluding resources referenced by security groups).
         * @type {number || null}
         */
        this.TotalCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.CVM = 'CVM' in params ? params.CVM : null;
        this.CDB = 'CDB' in params ? params.CDB : null;
        this.ENI = 'ENI' in params ? params.ENI : null;
        this.SG = 'SG' in params ? params.SG : null;
        this.CLB = 'CLB' in params ? params.CLB : null;

        if (params.InstanceStatistics) {
            this.InstanceStatistics = new Array();
            for (let z in params.InstanceStatistics) {
                let obj = new InstanceStatistic();
                obj.deserialize(params.InstanceStatistics[z]);
                this.InstanceStatistics.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

    }
}

/**
 * DeleteServiceTemplate response structure.
 * @class
 */
class DeleteServiceTemplateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateServiceTemplate request structure.
 * @class
 */
class CreateServiceTemplateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Template name of the protocol port
         * @type {string || null}
         */
        this.ServiceTemplateName = null;

        /**
         * Supported ports inlcude single port, multiple ports, consecutive ports and all ports. Supported protocols include TCP, UDP, ICMP and GRE. Either Services or ServicesExtra is required.
         * @type {Array.<string> || null}
         */
        this.Services = null;

        /**
         * You can add remarks. Supported ports include single port, multiple ports, consecutive ports and all ports. Supported protocols include TCP, UDP, ICMP and GRE. Either Services or ServicesExtra is required.
         * @type {Array.<ServicesInfo> || null}
         */
        this.ServicesExtra = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateName = 'ServiceTemplateName' in params ? params.ServiceTemplateName : null;
        this.Services = 'Services' in params ? params.Services : null;

        if (params.ServicesExtra) {
            this.ServicesExtra = new Array();
            for (let z in params.ServicesExtra) {
                let obj = new ServicesInfo();
                obj.deserialize(params.ServicesExtra[z]);
                this.ServicesExtra.push(obj);
            }
        }

    }
}

/**
 * Internet Key Exchange (IKE) configuration. IKE has a self-protection mechanism. The network security protocol is configured by the user.
 * @class
 */
class IKEOptionsSpecification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Encryption algorithm. Valid values: `3DES-CBC`, `AES-CBC-128`, `AES-CBS-192`, `AES-CBC-256`, `DES-CBC`, and `SM4`; default value: `3DES-CBC`.
         * @type {string || null}
         */
        this.PropoEncryAlgorithm = null;

        /**
         * Authentication algorithm. Valid values: `MD5`, `SHA1` and `SHA-256`; default value: `MD5`.
         * @type {string || null}
         */
        this.PropoAuthenAlgorithm = null;

        /**
         * Negotiation mode. Available values: 'AGGRESSIVE' and 'MAIN'. Default is MAIN.
         * @type {string || null}
         */
        this.ExchangeMode = null;

        /**
         * Type of local identity. Available values: 'ADDRESS' and 'FQDN'. Default is ADDRESS.
         * @type {string || null}
         */
        this.LocalIdentity = null;

        /**
         * Type of remote identity. Available values: 'ADDRESS' and 'FQDN'. Default is ADDRESS.
         * @type {string || null}
         */
        this.RemoteIdentity = null;

        /**
         * Local identity. When ADDRESS is selected for LocalIdentity, LocalAddress is required. The default LocalAddress is the public IP of the VPN gateway.
         * @type {string || null}
         */
        this.LocalAddress = null;

        /**
         * Remote identity. When ADDRESS is selected for RemoteIdentity, RemoteAddress is required.
         * @type {string || null}
         */
        this.RemoteAddress = null;

        /**
         * Local identity. When FQDN is selected for LocalIdentity, LocalFqdnName is required.
         * @type {string || null}
         */
        this.LocalFqdnName = null;

        /**
         * Remote identity. When FQDN is selected for RemoteIdentity, RemoteFqdnName is required.
         * @type {string || null}
         */
        this.RemoteFqdnName = null;

        /**
         * DH group. Specify the DH group used for exchanging the key via IKE. Available values: 'GROUP1', 'GROUP2', 'GROUP5', 'GROUP14', and 'GROUP24'.
         * @type {string || null}
         */
        this.DhGroupName = null;

        /**
         * IKE SA lifetime (in sec). Value range: 60-604800
         * @type {number || null}
         */
        this.IKESaLifetimeSeconds = null;

        /**
         * IKE version
         * @type {string || null}
         */
        this.IKEVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PropoEncryAlgorithm = 'PropoEncryAlgorithm' in params ? params.PropoEncryAlgorithm : null;
        this.PropoAuthenAlgorithm = 'PropoAuthenAlgorithm' in params ? params.PropoAuthenAlgorithm : null;
        this.ExchangeMode = 'ExchangeMode' in params ? params.ExchangeMode : null;
        this.LocalIdentity = 'LocalIdentity' in params ? params.LocalIdentity : null;
        this.RemoteIdentity = 'RemoteIdentity' in params ? params.RemoteIdentity : null;
        this.LocalAddress = 'LocalAddress' in params ? params.LocalAddress : null;
        this.RemoteAddress = 'RemoteAddress' in params ? params.RemoteAddress : null;
        this.LocalFqdnName = 'LocalFqdnName' in params ? params.LocalFqdnName : null;
        this.RemoteFqdnName = 'RemoteFqdnName' in params ? params.RemoteFqdnName : null;
        this.DhGroupName = 'DhGroupName' in params ? params.DhGroupName : null;
        this.IKESaLifetimeSeconds = 'IKESaLifetimeSeconds' in params ? params.IKESaLifetimeSeconds : null;
        this.IKEVersion = 'IKEVersion' in params ? params.IKEVersion : null;

    }
}

/**
 * CreateCcn response structure.
 * @class
 */
class CreateCcnResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN object.
         * @type {CCN || null}
         */
        this.Ccn = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ccn) {
            let obj = new CCN();
            obj.deserialize(params.Ccn)
            this.Ccn = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpnConnections request structure.
 * @class
 */
class DescribeVpnConnectionsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The instance ID of the VPN tunnel, such as `vpnx-f49l6u0z`. Each request can have a maximum of 100 instances. `VpnConnectionIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.VpnConnectionIds = null;

        /**
         * Filter condition. In each request, the upper limit for `Filters` is 10 and 5 for `Filter.Values`. `VpnConnectionIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - VPC instance ID, such as `vpc-0a36uwkr`.</li>
<li>vpn-gateway-id - String - VPN gateway instance ID, such as `vpngw-p4lmqawn`.</li>
<li>customer-gateway-id - String - Customer gateway instance ID, such as `cgw-l4rblw63`.</li>
<li>vpn-connection-name - String - Connection name, such as `test-vpn`.</li>
<li>vpn-connection-id - String - Connection instance ID, such as `vpnx-5p7vkch8"`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The Offset. The default value is 0. For more information about Offset, see the relevant section in the API Introduction.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of values to be returned. The default value is 20. Maximum is 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnConnectionIds = 'VpnConnectionIds' in params ? params.VpnConnectionIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateAssistantCidr request structure.
 * @class
 */
class CreateAssistantCidrRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` instance `ID`, such as `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Array of CIDR blocks, such as ["10.0.0.0/16", "172.16.0.0/16"]
         * @type {Array.<string> || null}
         */
        this.CidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CidrBlocks = 'CidrBlocks' in params ? params.CidrBlocks : null;

    }
}

/**
 * DescribeNetworkInterfaces request structure.
 * @class
 */
class DescribeNetworkInterfacesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries the ID of the ENI instance, such as `eni-pxir56ns`. Each request can have a maximum of 100 instances. `NetworkInterfaceIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.NetworkInterfaceIds = null;

        /**
         * Filter. `NetworkInterfaceIds` and `Filters` cannot be specified at the same time.
<li>`vpc-id` - String - VPC ID, such as `vpc-f49l6u0z`. </li>
<li>`subnet-id` - String - Subnet ID, such as `subnet-f49l6u0z`. </li>
<li>`network-interface-id` - String - ENI ID, such as `eni-5k56k7k7`. </li>
<li>`attachment.instance-id` - String - ID of the bound CVM instance, such as `ins-3nqpdn3i`. </li>
<li>`groups.security-group-id` - String - ID of the bound security group, such as `sg-f9ekbxeq`. </li>
<li>`network-interface-name` - String - ENI instance name. </li>
<li>`network-interface-description` - String - ENI instance description. </li>
<li>`address-ip` - String - Private IPv4 address. A single IP will be fuzzily matched with the suffix, while multiple IPs will be exactly matched. It can be used with `ip-exact-match` to query and exactly match a single IP. </li>
<li>`ip-exact-match` - Boolean - Exact match by private IPv4 address. The first value will be returned if multiple values are found. </li>
<li>`tag-key` - String - Optional - Tag key. See Example 2 to learn more details. </li>
<li>`tag:tag-key` - String - Optional - Tag key-value pair. The `tag-key` should be replaced with a specific tag key. See Example 2 to learn more details. </li>
<li>`is-primary` - Boolean - Optional - Filter based on whether it is a primary ENI. Values: `true`, `false`. If this parameter is not specified, filter the both. </li>
<li>`eni-type` - String - Optional - Filter by ENI type. Values: `0` (Secondary ENI), `1` (Primary ENI), `2` (Relayed ENI) </li>
<li>`eni-qos` - String - Optional - Filter by ENI service level. Values: `AG` (Bronze), `AU` (Silver) </li>
<li>`address-ipv6` - String - Optional - Filter by private IPv6 address. Multiple IPv6 addresses can be used for query. If this field is used together with `address-ip`, their intersection will be used. </li>
<li>`public-address-ip` - String - Public IPv4 address. It supports exact matching. </li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceIds = 'NetworkInterfaceIds' in params ? params.NetworkInterfaceIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ReleaseIp6AddressesBandwidth response structure.
 * @class
 */
class ReleaseIp6AddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Asynchronous task ID. You can call the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcIpv6Addresses request structure.
 * @class
 */
class DescribeVpcIpv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC`, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The `IP` address list. Each request supports a maximum of `10` batch querying.
         * @type {Array.<string> || null}
         */
        this.Ipv6Addresses = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Ipv6Addresses = 'Ipv6Addresses' in params ? params.Ipv6Addresses : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * SNAT rule of a NAT Gateway
 * @class
 */
class SourceIpTranslationNatRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID. It can be left empty if `ResourceType` is `USERDEFINED`.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Resource type. Valid values: `SUBNET`, `NETWORKINTERFACE`, `USERDEFINED`
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Source IP/IP range
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Elastic IP address pool
         * @type {Array.<string> || null}
         */
        this.PublicIpAddresses = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * SNAT rule ID
         * @type {string || null}
         */
        this.NatGatewaySnatId = null;

        /**
         * NAT gateway ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * VPC ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The creation time of a NAT gateway's SNAT rule.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.PublicIpAddresses = 'PublicIpAddresses' in params ? params.PublicIpAddresses : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.NatGatewaySnatId = 'NatGatewaySnatId' in params ? params.NatGatewaySnatId : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * DisableCcnRoutes request structure.
 * @class
 */
class DisableCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The unique ID of the CCN routing policy, such as `ccnr-f49l6u0z`.
         * @type {Array.<string> || null}
         */
        this.RouteIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;

    }
}

/**
 * ModifyNatGatewayDestinationIpPortTranslationNatRule response structure.
 * @class
 */
class ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNatGatewaySourceIpTranslationNatRule request structure.
 * @class
 */
class ModifyNatGatewaySourceIpTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT Gateway, such as `nat-df453454`
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The SNAT forwarding rule of the NAT Gateway
         * @type {SourceIpTranslationNatRule || null}
         */
        this.SourceIpTranslationNatRule = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.SourceIpTranslationNatRule) {
            let obj = new SourceIpTranslationNatRule();
            obj.deserialize(params.SourceIpTranslationNatRule)
            this.SourceIpTranslationNatRule = obj;
        }

    }
}

/**
 * SetVpnGatewaysRenewFlag request structure.
 * @class
 */
class SetVpnGatewaysRenewFlagRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPN gateway IDs
         * @type {Array.<string> || null}
         */
        this.VpnGatewayIds = null;

        /**
         * Status of auto-renewal
Values: `0` (Follow original), `1` (Enable auto-renewal), `2` (Disable auto-renewal) 
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * VPNGW type: `IPSEC`, `SSL`
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayIds = 'VpnGatewayIds' in params ? params.VpnGatewayIds : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * ModifyCcnRegionBandwidthLimitsType response structure.
 * @class
 */
class ModifyCcnRegionBandwidthLimitsTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpnGateways response structure.
 * @class
 */
class DescribeVpnGatewaysResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The list of details of VPN gateway instances.
         * @type {Array.<VpnGateway> || null}
         */
        this.VpnGatewaySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.VpnGatewaySet) {
            this.VpnGatewaySet = new Array();
            for (let z in params.VpnGatewaySet) {
                let obj = new VpnGateway();
                obj.deserialize(params.VpnGatewaySet[z]);
                this.VpnGatewaySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNetworkAclQuintupleEntries request structure.
 * @class
 */
class ModifyNetworkAclQuintupleEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Network ACL quintuple rule set.
         * @type {NetworkAclQuintupleEntries || null}
         */
        this.NetworkAclQuintupleSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;

        if (params.NetworkAclQuintupleSet) {
            let obj = new NetworkAclQuintupleEntries();
            obj.deserialize(params.NetworkAclQuintupleSet)
            this.NetworkAclQuintupleSet = obj;
        }

    }
}

/**
 * ModifyServiceTemplateAttribute request structure.
 * @class
 */
class ModifyServiceTemplateAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port template instance ID, such as `ppm-529nwwj8`.
         * @type {string || null}
         */
        this.ServiceTemplateId = null;

        /**
         * Protocol port template name.
         * @type {string || null}
         */
        this.ServiceTemplateName = null;

        /**
         * It supports single port, multiple ports, consecutive ports and all ports. Supported protocols include TCP, UDP, ICMP, and GRE.
         * @type {Array.<string> || null}
         */
        this.Services = null;

        /**
         * Protocol port information with remarks. Supported ports include single port, multiple ports, consecutive ports and other ports. Supported protocols include TCP, UDP, ICMP, and GRE.
         * @type {Array.<ServicesInfo> || null}
         */
        this.ServicesExtra = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateId = 'ServiceTemplateId' in params ? params.ServiceTemplateId : null;
        this.ServiceTemplateName = 'ServiceTemplateName' in params ? params.ServiceTemplateName : null;
        this.Services = 'Services' in params ? params.Services : null;

        if (params.ServicesExtra) {
            this.ServicesExtra = new Array();
            for (let z in params.ServicesExtra) {
                let obj = new ServicesInfo();
                obj.deserialize(params.ServicesExtra[z]);
                this.ServicesExtra.push(obj);
            }
        }

    }
}

/**
 * Security group policy object
 * @class
 */
class SecurityGroupPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * The index number of security group rules, which dynamically changes with the rules. This parameter can be obtained via the `DescribeSecurityGroupPolicies` API and used with the `Version` field in the returned value of the API.
         * @type {number || null}
         */
        this.PolicyIndex = null;

        /**
         * Protocol. Valid values: TCP, UDP, ICMP, ICMPv6, ALL.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Port (`all`, a single port, or a port range).
Note: If the `Protocol` value is set to `ALL`, the `Port` value also needs to be set to `all`.
         * @type {string || null}
         */
        this.Port = null;

        /**
         * Protocol port ID or protocol port group ID. ServiceTemplate and Protocol+Port are mutually exclusive.
         * @type {ServiceTemplateSpecification || null}
         */
        this.ServiceTemplate = null;

        /**
         * Either `CidrBlock` or `Ipv6CidrBlock can be specified. Note that if `0.0.0.0/n` is entered, it is mapped to 0.0.0.0/0.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * The CIDR block or IPv6 (mutually exclusive).
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

        /**
         * The security group instance ID, such as `sg-ohuuioma`.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * IP address ID or IP address group ID.
         * @type {AddressTemplateSpecification || null}
         */
        this.AddressTemplate = null;

        /**
         * ACCEPT or DROP.
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Security group policy description.
         * @type {string || null}
         */
        this.PolicyDescription = null;

        /**
         * The last modification time of the security group.
         * @type {string || null}
         */
        this.ModifyTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PolicyIndex = 'PolicyIndex' in params ? params.PolicyIndex : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Port = 'Port' in params ? params.Port : null;

        if (params.ServiceTemplate) {
            let obj = new ServiceTemplateSpecification();
            obj.deserialize(params.ServiceTemplate)
            this.ServiceTemplate = obj;
        }
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.AddressTemplate) {
            let obj = new AddressTemplateSpecification();
            obj.deserialize(params.AddressTemplate)
            this.AddressTemplate = obj;
        }
        this.Action = 'Action' in params ? params.Action : null;
        this.PolicyDescription = 'PolicyDescription' in params ? params.PolicyDescription : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

    }
}

/**
 * DescribeIpGeolocationInfos request structure.
 * @class
 */
class DescribeIpGeolocationInfosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of IP addresses (only IPv4 addresses are available currently) to be queried; upper limit: 100
         * @type {Array.<string> || null}
         */
        this.AddressIps = null;

        /**
         * Fields of the IP addresses to be queried.
         * @type {IpField || null}
         */
        this.Fields = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIps = 'AddressIps' in params ? params.AddressIps : null;

        if (params.Fields) {
            let obj = new IpField();
            obj.deserialize(params.Fields)
            this.Fields = obj;
        }

    }
}

/**
 * AddTemplateMember response structure.
 * @class
 */
class AddTemplateMemberResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResetAttachCcnInstances response structure.
 * @class
 */
class ResetAttachCcnInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSnapshotPolicies response structure.
 * @class
 */
class CreateSnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policies
         * @type {Array.<SnapshotPolicy> || null}
         */
        this.SnapshotPolicies = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SnapshotPolicies) {
            this.SnapshotPolicies = new Array();
            for (let z in params.SnapshotPolicies) {
                let obj = new SnapshotPolicy();
                obj.deserialize(params.SnapshotPolicies[z]);
                this.SnapshotPolicies.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeServiceTemplateGroups response structure.
 * @class
 */
class DescribeServiceTemplateGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Protocol port template group.
         * @type {Array.<ServiceTemplateGroup> || null}
         */
        this.ServiceTemplateGroupSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ServiceTemplateGroupSet) {
            this.ServiceTemplateGroupSet = new Array();
            for (let z in params.ServiceTemplateGroupSet) {
                let obj = new ServiceTemplateGroup();
                obj.deserialize(params.ServiceTemplateGroupSet[z]);
                this.ServiceTemplateGroupSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcEndPoint request structure.
 * @class
 */
class DescribeVpcEndPointRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter condition
<li> end-point-service-id - String - (Filter condition) Endpoint service ID.</li>
<li>end-point-name - String - (Filter condition) Endpoint instance name.</li>
<li> end-point-id - String - (Filter condition) Endpoint instance ID.</li>
<li> vpc-id - String - (Filter condition) VPC instance ID.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of results per page; default value: 20; maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Endpoint ID list
         * @type {Array.<string> || null}
         */
        this.EndPointId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;

    }
}

/**
 * AssignPrivateIpAddresses request structure.
 * @class
 */
class AssignPrivateIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The information on private IP addresses, of which you can specify a maximum of 10 at a time. You should provide either this parameter or SecondaryPrivateIpAddressCount, or both.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddresses = null;

        /**
         * The number of newly-applied private IP addresses. You should provide either this parameter or PrivateIpAddresses, or both. The total number of private IP addresses cannot exceed the quota. For more information, see<a href="/document/product/576/18527">ENI Use Limits</a>.
         * @type {number || null}
         */
        this.SecondaryPrivateIpAddressCount = null;

        /**
         * IP service level. It is used together with `SecondaryPrivateIpAddressCount`. Values: PT` (Gold), `AU` (Silver), `AG `(Bronze) and DEFAULT (Default).
         * @type {string || null}
         */
        this.QosLevel = null;

        /**
         * 
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.PrivateIpAddresses) {
            this.PrivateIpAddresses = new Array();
            for (let z in params.PrivateIpAddresses) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddresses[z]);
                this.PrivateIpAddresses.push(obj);
            }
        }
        this.SecondaryPrivateIpAddressCount = 'SecondaryPrivateIpAddressCount' in params ? params.SecondaryPrivateIpAddressCount : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * Resource statistical items
 * @class
 */
class ResourceStatisticsItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource type, such as CVM, ENI
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Resource name.
         * @type {string || null}
         */
        this.ResourceName = null;

        /**
         * Number of resources
         * @type {number || null}
         */
        this.ResourceCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceName = 'ResourceName' in params ? params.ResourceName : null;
        this.ResourceCount = 'ResourceCount' in params ? params.ResourceCount : null;

    }
}

/**
 * DeleteRoutePolicyEntries request structure.
 * @class
 */
class DeleteRoutePolicyEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the instance ID of the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Route reception policy entry list. when deleting a routing policy rule, use the routepolicyentryid field of RoutePolicyEntry.
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }

    }
}

/**
 * DetachClassicLinkVpc request structure.
 * @class
 */
class DetachClassicLinkVpcRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance. You can obtain the parameter value from the VpcId field in the returned result of DescribeVpcs API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Queries the ID of the CVM instance, such as `ins-r8hr2upy`.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * DescribeBandwidthPackageBillUsage response structure.
 * @class
 */
class DescribeBandwidthPackageBillUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Current billable usage.
         * @type {Array.<BandwidthPackageBillBandwidth> || null}
         */
        this.BandwidthPackageBillBandwidthSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BandwidthPackageBillBandwidthSet) {
            this.BandwidthPackageBillBandwidthSet = new Array();
            for (let z in params.BandwidthPackageBillBandwidthSet) {
                let obj = new BandwidthPackageBillBandwidth();
                obj.deserialize(params.BandwidthPackageBillBandwidthSet[z]);
                this.BandwidthPackageBillBandwidthSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteBandwidthPackage response structure.
 * @class
 */
class DeleteBandwidthPackageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNatGatewayAttribute request structure.
 * @class
 */
class ModifyNatGatewayAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The NAT gateway name, such as `test_nat`.
         * @type {string || null}
         */
        this.NatGatewayName = null;

        /**
         * The maximum outbound bandwidth of the NAT gateway. Unit: Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Whether to modify the security group bound to the NAT gateway
         * @type {boolean || null}
         */
        this.ModifySecurityGroup = null;

        /**
         * The final security groups bound to the NAT Gateway, such as `['sg-1n232323', 'sg-o4242424']`. An empty list indicates that all the security groups have been deleted.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.NatGatewayName = 'NatGatewayName' in params ? params.NatGatewayName : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.ModifySecurityGroup = 'ModifySecurityGroup' in params ? params.ModifySecurityGroup : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * DescribeLocalGateway request structure.
 * @class
 */
class DescribeLocalGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query criteria:
vpc-id: filter by VPC ID; local-gateway-name: filter by local gateway name (fuzzy search is supported); local-gateway-id: filter by local gateway instance ID; cdc-id: filter by CDC instance ID.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The offset. Default value: 0. For more information on `Offset`, see the relevant sections in API [Introduction](https://intl.cloud.tencent.com/document/api/213/11646?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant sections in API [Introduction](https://intl.cloud.tencent.com/document/api/213/11646?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Flow Log
 * @class
 */
class FlowLog extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the VPC instance.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The unique ID of the flow log.
         * @type {string || null}
         */
        this.FlowLogId = null;

        /**
         * The name of the flow log instance.
         * @type {string || null}
         */
        this.FlowLogName = null;

        /**
         * The type of resource associated with the flow log. Valid values: `VPC`, `SUBNET`, `NETWORKINTERFACE`, `CCN`, `NAT`, and `DCG`.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The unique ID of the resource
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Type of flow logs to be collected. Valid values: `ACCEPT`, `REJECT` and `ALL`.
         * @type {string || null}
         */
        this.TrafficType = null;

        /**
         * The storage ID of the flow log
         * @type {string || null}
         */
        this.CloudLogId = null;

        /**
         * Flow log storage ID status.
         * @type {string || null}
         */
        this.CloudLogState = null;

        /**
         * The flow log description.
         * @type {string || null}
         */
        this.FlowLogDescription = null;

        /**
         * The creation time of the flow log.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Tag list, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Whether to enable. `true`: yes; `false`: no.
         * @type {boolean || null}
         */
        this.Enable = null;

        /**
         * Consumer end types: cls and ckafka
Note: this field may return `null`, indicating that no valid value can be found.
         * @type {string || null}
         */
        this.StorageType = null;

        /**
         * Information of the consumer, which is returned when the consumer type is `ckafka`.
Note: this field may return `null`, indicating that no valid value can be found.
         * @type {FlowLogStorage || null}
         */
        this.FlowLogStorage = null;

        /**
         * The region corresponding to the flow log storage ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CloudLogRegion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.FlowLogId = 'FlowLogId' in params ? params.FlowLogId : null;
        this.FlowLogName = 'FlowLogName' in params ? params.FlowLogName : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.TrafficType = 'TrafficType' in params ? params.TrafficType : null;
        this.CloudLogId = 'CloudLogId' in params ? params.CloudLogId : null;
        this.CloudLogState = 'CloudLogState' in params ? params.CloudLogState : null;
        this.FlowLogDescription = 'FlowLogDescription' in params ? params.FlowLogDescription : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;

        if (params.FlowLogStorage) {
            let obj = new FlowLogStorage();
            obj.deserialize(params.FlowLogStorage)
            this.FlowLogStorage = obj;
        }
        this.CloudLogRegion = 'CloudLogRegion' in params ? params.CloudLogRegion : null;

    }
}

/**
 * ModifyDirectConnectGatewayAttribute request structure.
 * @class
 */
class ModifyDirectConnectGatewayAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the direct connect gateway, such as `dcg-9o233uri`.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The direct connect gateway name. You can enter any name within 60 characters.
         * @type {string || null}
         */
        this.DirectConnectGatewayName = null;

        /**
         * The CCN route-learning type. Valid values: `BGP` (Automatic learning), `STATIC` (Static, that is, user-configured). You can only modify `CcnRouteType` for a CCN direct connect gateway with BGP enabled.
         * @type {string || null}
         */
        this.CcnRouteType = null;

        /**
         * CCN route publishing method. Valid values: `standard` and `exquisite`. You can only modify `ModeType` for a CCN direct connect gateway.
         * @type {string || null}
         */
        this.ModeType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.DirectConnectGatewayName = 'DirectConnectGatewayName' in params ? params.DirectConnectGatewayName : null;
        this.CcnRouteType = 'CcnRouteType' in params ? params.CcnRouteType : null;
        this.ModeType = 'ModeType' in params ? params.ModeType : null;

    }
}

/**
 * IP information to be queried
 * @class
 */
class IpField extends  AbstractModel {
    constructor(){
        super();

        /**
         * Country/region of the IP
         * @type {boolean || null}
         */
        this.Country = null;

        /**
         * Province/municipality/state of the IP
         * @type {boolean || null}
         */
        this.Province = null;

        /**
         * City of the IP
         * @type {boolean || null}
         */
        this.City = null;

        /**
         * City district of the IP
         * @type {boolean || null}
         */
        this.Region = null;

        /**
         * Access ISP field
         * @type {boolean || null}
         */
        this.Isp = null;

        /**
         * ISP backbone network’s AS field
         * @type {boolean || null}
         */
        this.AsName = null;

        /**
         * Backbone AS ID
         * @type {boolean || null}
         */
        this.AsId = null;

        /**
         * Comment
         * @type {boolean || null}
         */
        this.Comment = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Country = 'Country' in params ? params.Country : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Isp = 'Isp' in params ? params.Isp : null;
        this.AsName = 'AsName' in params ? params.AsName : null;
        this.AsId = 'AsId' in params ? params.AsId : null;
        this.Comment = 'Comment' in params ? params.Comment : null;

    }
}

/**
 * CreateNetworkInterface response structure.
 * @class
 */
class CreateNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * ENI instance.
         * @type {NetworkInterface || null}
         */
        this.NetworkInterface = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkInterface) {
            let obj = new NetworkInterface();
            obj.deserialize(params.NetworkInterface)
            this.NetworkInterface = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddBandwidthPackageResources request structure.
 * @class
 */
class AddBandwidthPackageResourcesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the source, such as 'eip-xxxx' and 'lb-xxxx'. EIP and LB resources are currently supported.
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

        /**
         * The unique ID of the bandwidth package, such as 'bwp-xxxx'.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * The network type of the bandwidth package. Valid value: `BGP`, indicating that the internal resource is a BGP IP.
         * @type {string || null}
         */
        this.NetworkType = null;

        /**
         * The resource type, including `Address` and `LoadBalance`.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The protocol type of the bandwidth package. Valid values: `ipv4` and `ipv6`.
         * @type {string || null}
         */
        this.Protocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.NetworkType = 'NetworkType' in params ? params.NetworkType : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;

    }
}

/**
 * ReplaceRoutePolicyEntries request structure.
 * @class
 */
class ReplaceRoutePolicyEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the routing strategy, such as rrp-azd4dt1c.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Rule list of the routing strategy. requires specifying the policy rule ID (RoutePolicyEntryId).
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }

    }
}

/**
 * AssignIpv6SubnetCidrBlock request structure.
 * @class
 */
class AssignIpv6SubnetCidrBlockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the VPC where the subnet is located, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The assigned `IPv6` subnet IP range list.
         * @type {Array.<Ipv6SubnetCidrBlock> || null}
         */
        this.Ipv6SubnetCidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

        if (params.Ipv6SubnetCidrBlocks) {
            this.Ipv6SubnetCidrBlocks = new Array();
            for (let z in params.Ipv6SubnetCidrBlocks) {
                let obj = new Ipv6SubnetCidrBlock();
                obj.deserialize(params.Ipv6SubnetCidrBlocks[z]);
                this.Ipv6SubnetCidrBlocks.push(obj);
            }
        }

    }
}

/**
 * ReplaceRoutePolicyAssociations request structure.
 * @class
 */
class ReplaceRoutePolicyAssociationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route reception policy binding object list. requires specifying the route reception policy instance ID (RoutePolicyId) and route table instance ID (RouteTableId).
         * @type {Array.<RoutePolicyAssociation> || null}
         */
        this.RoutePolicyAssociationSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RoutePolicyAssociationSet) {
            this.RoutePolicyAssociationSet = new Array();
            for (let z in params.RoutePolicyAssociationSet) {
                let obj = new RoutePolicyAssociation();
                obj.deserialize(params.RoutePolicyAssociationSet[z]);
                this.RoutePolicyAssociationSet.push(obj);
            }
        }

    }
}

/**
 * CreateVpc response structure.
 * @class
 */
class CreateVpcResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPC object.
         * @type {Vpc || null}
         */
        this.Vpc = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Vpc) {
            let obj = new Vpc();
            obj.deserialize(params.Vpc)
            this.Vpc = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information about the secondary CIDR of the VPC.
 * @class
 */
class AssistantCidr extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of a `VPC` instance, such as `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The secondary CIDR, such as `172.16.0.0/16`.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * The secondary CIDR block type. 0: common secondary CIDR block. 1: container secondary CIDR block. Default: 0.
         * @type {number || null}
         */
        this.AssistantType = null;

        /**
         * Subnet Split by Auxiliary CIDR
         * @type {Array.<Subnet> || null}
         */
        this.SubnetSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.AssistantType = 'AssistantType' in params ? params.AssistantType : null;

        if (params.SubnetSet) {
            this.SubnetSet = new Array();
            for (let z in params.SubnetSet) {
                let obj = new Subnet();
                obj.deserialize(params.SubnetSet[z]);
                this.SubnetSet.push(obj);
            }
        }

    }
}

/**
 * ModifyNetworkAclEntries request structure.
 * @class
 */
class ModifyNetworkAclEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Network ACL rule set. `NetworkAclEntrySet` and `NetworkAclQuintupleSet` cannot be entered at the same time.
         * @type {NetworkAclEntrySet || null}
         */
        this.NetworkAclEntrySet = null;

        /**
         * Network ACL quintuple rule set. `NetworkAclEntrySet` and `NetworkAclQuintupleSet` cannot be entered at the same time.
         * @type {NetworkAclQuintupleEntries || null}
         */
        this.NetworkAclQuintupleSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;

        if (params.NetworkAclEntrySet) {
            let obj = new NetworkAclEntrySet();
            obj.deserialize(params.NetworkAclEntrySet)
            this.NetworkAclEntrySet = obj;
        }

        if (params.NetworkAclQuintupleSet) {
            let obj = new NetworkAclQuintupleEntries();
            obj.deserialize(params.NetworkAclQuintupleSet)
            this.NetworkAclQuintupleSet = obj;
        }

    }
}

/**
 * ReplaceRoutePolicyAssociations response structure.
 * @class
 */
class ReplaceRoutePolicyAssociationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcPrivateIpAddresses request structure.
 * @class
 */
class DescribeVpcPrivateIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC`, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The private `IP` address list. Each request supports a maximum of `10` batch querying.
         * @type {Array.<string> || null}
         */
        this.PrivateIpAddresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.PrivateIpAddresses = 'PrivateIpAddresses' in params ? params.PrivateIpAddresses : null;

    }
}

/**
 * IP address template
 * @class
 */
class AddressTemplate extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address template name.
         * @type {string || null}
         */
        this.AddressTemplateName = null;

        /**
         * The unique ID of the IP address template instance.
         * @type {string || null}
         */
        this.AddressTemplateId = null;

        /**
         * IP address information.
         * @type {Array.<string> || null}
         */
        this.AddressSet = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * IP address information with remarks
         * @type {Array.<AddressInfo> || null}
         */
        this.AddressExtraSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateName = 'AddressTemplateName' in params ? params.AddressTemplateName : null;
        this.AddressTemplateId = 'AddressTemplateId' in params ? params.AddressTemplateId : null;
        this.AddressSet = 'AddressSet' in params ? params.AddressSet : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.AddressExtraSet) {
            this.AddressExtraSet = new Array();
            for (let z in params.AddressExtraSet) {
                let obj = new AddressInfo();
                obj.deserialize(params.AddressExtraSet[z]);
                this.AddressExtraSet.push(obj);
            }
        }

    }
}

/**
 * ModifyTemplateMember response structure.
 * @class
 */
class ModifyTemplateMemberResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPN gateway quota object
 * @class
 */
class VpnGatewayQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * The bandwidth quota.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * The bandwidth quota name in Chinese.
         * @type {string || null}
         */
        this.Cname = null;

        /**
         * The bandwidth quota name in English.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.Cname = 'Cname' in params ? params.Cname : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * DescribeBandwidthPackageBillUsage request structure.
 * @class
 */
class DescribeBandwidthPackageBillUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the pay-as-you-go bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

    }
}

/**
 * UnassignIpv6Addresses response structure.
 * @class
 */
class UnassignIpv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeFlowLogs request structure.
 * @class
 */
class DescribeFlowLogsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the VPC instance
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The unique ID of the flow log.
         * @type {string || null}
         */
        this.FlowLogId = null;

        /**
         * The name of the flow log instance.
         * @type {string || null}
         */
        this.FlowLogName = null;

        /**
         * The resource type of the flow log. Valid values: 'VPC', 'SUBNET', and 'NETWORKINTERFACE'.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The unique ID of the resource.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Type of flow logs to be collected. Valid values: 'ACCEPT', 'REJECT' and 'ALL'.
         * @type {string || null}
         */
        this.TrafficType = null;

        /**
         * The storage ID of the flow log.
         * @type {string || null}
         */
        this.CloudLogId = null;

        /**
         * The storage ID status of the flow log.
         * @type {string || null}
         */
        this.CloudLogState = null;

        /**
         * Order by field. Valid values: 'flowLogName' and 'createTime'. Default value: 'createTime'.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * In ascending (`asc`) or descending (`desc`) order. Default value: 'desc'.
         * @type {string || null}
         */
        this.OrderDirection = null;

        /**
         * The offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of rows per page. Default value: 10.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter condition. `FlowLogId` and `Filters` cannot be specified at the same time.
<li> `tag-key` - String - Optional - Filter by the tag key.</li>
<li> `tag:tag-key` - String - Optional - Filter by the tag key-value pair. The tag-key should be replaced with a specified tag key.</li>
         * @type {Filter || null}
         */
        this.Filters = null;

        /**
         * The region corresponding to the flow log storage ID.
         * @type {string || null}
         */
        this.CloudLogRegion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.FlowLogId = 'FlowLogId' in params ? params.FlowLogId : null;
        this.FlowLogName = 'FlowLogName' in params ? params.FlowLogName : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.TrafficType = 'TrafficType' in params ? params.TrafficType : null;
        this.CloudLogId = 'CloudLogId' in params ? params.CloudLogId : null;
        this.CloudLogState = 'CloudLogState' in params ? params.CloudLogState : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            let obj = new Filter();
            obj.deserialize(params.Filters)
            this.Filters = obj;
        }
        this.CloudLogRegion = 'CloudLogRegion' in params ? params.CloudLogRegion : null;

    }
}

/**
 * DeleteTemplateMember request structure.
 * @class
 */
class DeleteTemplateMemberRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter template instance ID, which can be the instance ID of a parameter template of the following four types: IP address, protocol port, IP address group, and protocol port group.
         * @type {string || null}
         */
        this.TemplateId = null;

        /**
         * Information on the parameter template to be added. The template can be of the following four types: IP address, protocol port, IP address group, and protocol port group. The type should be consistent with that of the template specified by the TemplateId parameter.
         * @type {Array.<MemberInfo> || null}
         */
        this.TemplateMember = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TemplateId = 'TemplateId' in params ? params.TemplateId : null;

        if (params.TemplateMember) {
            this.TemplateMember = new Array();
            for (let z in params.TemplateMember) {
                let obj = new MemberInfo();
                obj.deserialize(params.TemplateMember[z]);
                this.TemplateMember.push(obj);
            }
        }

    }
}

/**
 * CloneSecurityGroup request structure.
 * @class
 */
class CloneSecurityGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group instance ID, such as `esg-33ocnj9n`, which can be obtained through the <a href="https://intl.cloud.tencent.com/document/product/215/15808?from_cn_redirect=1">DescribeSecurityGroups</a> API.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * The name of security group clone. You can enter any name within 60 characters. If this parameter is left empty, the security group clone will use the name of the source security group.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Description of the security group clone. You can enter up to 100 characters. If this parameter is left empty, the security group clone will use the description of the source security group.
         * @type {string || null}
         */
        this.GroupDescription = null;

        /**
         * Project ID. Default value: 0. You can query it on the <a href="https://console.cloud.tencent.com/project">project management page</a> of the Tencent Cloud console.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * The region of the source security group for a cross-region clone. For example, to clone the security group in Guangzhou to Shanghai, set it to `ap-guangzhou`.
         * @type {string || null}
         */
        this.RemoteRegion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupDescription = 'GroupDescription' in params ? params.GroupDescription : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RemoteRegion = 'RemoteRegion' in params ? params.RemoteRegion : null;

    }
}

/**
 * AssociateNatGatewayAddress request structure.
 * @class
 */
class AssociateNatGatewayAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The number of EIPs you want to apply for. Either `AddressCount` or `PublicAddresses` must be passed in.
         * @type {number || null}
         */
        this.AddressCount = null;

        /**
         * Array of the EIPs bound to the NAT gateway. Either `AddressCount` or `PublicAddresses` must be passed in.
         * @type {Array.<string> || null}
         */
        this.PublicIpAddresses = null;

        /**
         * The availability zone of the EIP, which is passed in when the EIP is automatically assigned.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * The bandwidth size (in Mbps) of the EIP bound to the NAT gateway, which defaults to the maximum value applicable for the current user type.
         * @type {number || null}
         */
        this.StockPublicIpAddressesBandwidthOut = null;

        /**
         * The size of the public network IP bandwidth to be applied for (in Mbps), which defaults to the maximum value applicable for the current user type.
         * @type {number || null}
         */
        this.PublicIpAddressesBandwidthOut = null;

        /**
         * Whether the public IP and the NAT gateway must be in the same availability zone. Valid values: `true` and `false`. This parameter is valid only when `Zone` is specified.
         * @type {boolean || null}
         */
        this.PublicIpFromSameZone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.AddressCount = 'AddressCount' in params ? params.AddressCount : null;
        this.PublicIpAddresses = 'PublicIpAddresses' in params ? params.PublicIpAddresses : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.StockPublicIpAddressesBandwidthOut = 'StockPublicIpAddressesBandwidthOut' in params ? params.StockPublicIpAddressesBandwidthOut : null;
        this.PublicIpAddressesBandwidthOut = 'PublicIpAddressesBandwidthOut' in params ? params.PublicIpAddressesBandwidthOut : null;
        this.PublicIpFromSameZone = 'PublicIpFromSameZone' in params ? params.PublicIpFromSameZone : null;

    }
}

/**
 * CreateDirectConnectGateway request structure.
 * @class
 */
class CreateDirectConnectGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the direct connect gateway.
         * @type {string || null}
         */
        this.DirectConnectGatewayName = null;

        /**
         * The type of the associated network. Valid values:
<li>VPC</li>
<li>CCN</li>
         * @type {string || null}
         */
        this.NetworkType = null;

        /**
         * <li>When the NetworkType is VPC, this value is the VPC instance ID</li>
<li>When the NetworkType is CCN, this value is the CCN instance ID</li>
         * @type {string || null}
         */
        this.NetworkInstanceId = null;

        /**
         * The type of the gateway. Valid values:
<li>NORMAL - (Default) Standard type. Note: CCN only supports the standard type</li>
<li>NAT - NAT type</li>NAT gateway supports network address translation. The specified type cannot be modified. A VPC can create one NAT direct connect gateway and one non-NAT direct connect gateway
         * @type {string || null}
         */
        this.GatewayType = null;

        /**
         * CCN route publishing method. Valid values: `standard` and `exquisite`. This parameter is only valid for the CCN direct connect gateway.
         * @type {string || null}
         */
        this.ModeType = null;

        /**
         * Availability zone where the direct connect gateway resides.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * ID of DC highly available placement group
         * @type {string || null}
         */
        this.HaZoneGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayName = 'DirectConnectGatewayName' in params ? params.DirectConnectGatewayName : null;
        this.NetworkType = 'NetworkType' in params ? params.NetworkType : null;
        this.NetworkInstanceId = 'NetworkInstanceId' in params ? params.NetworkInstanceId : null;
        this.GatewayType = 'GatewayType' in params ? params.GatewayType : null;
        this.ModeType = 'ModeType' in params ? params.ModeType : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.HaZoneGroupId = 'HaZoneGroupId' in params ? params.HaZoneGroupId : null;

    }
}

/**
 * CreateVpcEndPoint request structure.
 * @class
 */
class CreateVpcEndPointRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Endpoint name
         * @type {string || null}
         */
        this.EndPointName = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * Endpoint VIP. You can apply for a specified IP.
         * @type {string || null}
         */
        this.EndPointVip = null;

        /**
         * Security group ID
         * @type {string || null}
         */
        this.SecurityGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.EndPointName = 'EndPointName' in params ? params.EndPointName : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.EndPointVip = 'EndPointVip' in params ? params.EndPointVip : null;
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

    }
}

/**
 * ModifyBandwidthPackageAttribute request structure.
 * @class
 */
class ModifyBandwidthPackageAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * The name of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageName = null;

        /**
         * The billing mode of the bandwidth package. Values: 
`TOP5_POSTPAID_BY_MONTH`: Bill by the top 5 bandwidth value of the current month in a postpaid manner
         * @type {string || null}
         */
        this.ChargeType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.BandwidthPackageName = 'BandwidthPackageName' in params ? params.BandwidthPackageName : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;

    }
}

/**
 * TransformAddress response structure.
 * @class
 */
class TransformAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * The unique ID after converting to EIP
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateNetworkInterfaceSecurityGroups request structure.
 * @class
 */
class DisassociateNetworkInterfaceSecurityGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ENI instance ID, e.g. eni-pxir56ns. You can enter up to 100 instances for each request.
         * @type {Array.<string> || null}
         */
        this.NetworkInterfaceIds = null;

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. It can be obtained through DescribeSecurityGroups. You can enter up to 100 instances for each request.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceIds = 'NetworkInterfaceIds' in params ? params.NetworkInterfaceIds : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * Route reception policy entry.
 * @class
 */
class RoutePolicyEntry extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the unique ID of the IPv4 routing strategy entry.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RoutePolicyEntryId = null;

        /**
         * Destination ip range.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Describes the routing strategy rule.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Routing Type

Specifies the USER-customized data type.
NETD: specifies the route for network detection.
CCN: CCN route.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RouteType = null;

        /**
         * Next hop type. types currently supported:.
CVM: cloud virtual machine with public network gateway type.
VPN: vpn gateway.
DIRECTCONNECT: direct connect gateway.
PEERCONNECTION: peering connection.
HAVIP: high availability virtual ip.
NAT: specifies the nat gateway. 
EIP: specifies the public ip address of the cloud virtual machine.
LOCAL_GATEWAY: specifies the local gateway.
PVGW: pvgw gateway.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.GatewayType = null;

        /**
         * Gateway unique ID.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.GatewayId = null;

        /**
         * Priority. a smaller value indicates a higher priority.
Note: This field may return null, indicating that no valid value was found.
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Action.
DROP: drop.
DISABLE: receive and disable.
ACCEPT: receive and enable.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Creation time.

Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Specifies the region.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.Region = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyEntryId = 'RoutePolicyEntryId' in params ? params.RoutePolicyEntryId : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.RouteType = 'RouteType' in params ? params.RouteType : null;
        this.GatewayType = 'GatewayType' in params ? params.GatewayType : null;
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.Region = 'Region' in params ? params.Region : null;

    }
}

/**
 * Security group policy set
 * @class
 */
class SecurityGroupPolicySet extends  AbstractModel {
    constructor(){
        super();

        /**
         * The version number of the security group policy, which will automatically increase by one each time you update the security group policy, so as to prevent expiration of the updated routing policies. If it is left empty, any conflicts will be ignored. 
Note: This parameter may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Outbound rule. 
Note: This parameter may return null, indicating that no valid values can be obtained.
         * @type {Array.<SecurityGroupPolicy> || null}
         */
        this.Egress = null;

        /**
         * Inbound rule. 
Note: This parameter may return null, indicating that no valid values can be obtained.
         * @type {Array.<SecurityGroupPolicy> || null}
         */
        this.Ingress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Version = 'Version' in params ? params.Version : null;

        if (params.Egress) {
            this.Egress = new Array();
            for (let z in params.Egress) {
                let obj = new SecurityGroupPolicy();
                obj.deserialize(params.Egress[z]);
                this.Egress.push(obj);
            }
        }

        if (params.Ingress) {
            this.Ingress = new Array();
            for (let z in params.Ingress) {
                let obj = new SecurityGroupPolicy();
                obj.deserialize(params.Ingress[z]);
                this.Ingress.push(obj);
            }
        }

    }
}

/**
 * ModifyFlowLogAttribute request structure.
 * @class
 */
class ModifyFlowLogAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the flow log.
         * @type {string || null}
         */
        this.FlowLogId = null;

        /**
         * The VPC ID or unique ID of the resource. We recommend using the unique ID. This parameter is required unless the attributes of a CCN flow log is modified.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The name of the flow log instance.
         * @type {string || null}
         */
        this.FlowLogName = null;

        /**
         * The description of the flow log.
         * @type {string || null}
         */
        this.FlowLogDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowLogId = 'FlowLogId' in params ? params.FlowLogId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.FlowLogName = 'FlowLogName' in params ? params.FlowLogName : null;
        this.FlowLogDescription = 'FlowLogDescription' in params ? params.FlowLogDescription : null;

    }
}

/**
 * UnassignIpv6SubnetCidrBlock response structure.
 * @class
 */
class UnassignIpv6SubnetCidrBlockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpcEndPointServiceAttribute request structure.
 * @class
 */
class ModifyVpcEndPointServiceAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Endpoint service name
         * @type {string || null}
         */
        this.EndPointServiceName = null;

        /**
         * Whether to automatically accept VPC endpoint connection requests. Valid values: <ui><li>`true`: yes<li>`false`: no</ul>
         * @type {boolean || null}
         */
        this.AutoAcceptFlag = null;

        /**
         * Real server ID in the format of `lb-xxx`.
         * @type {string || null}
         */
        this.ServiceInstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.EndPointServiceName = 'EndPointServiceName' in params ? params.EndPointServiceName : null;
        this.AutoAcceptFlag = 'AutoAcceptFlag' in params ? params.AutoAcceptFlag : null;
        this.ServiceInstanceId = 'ServiceInstanceId' in params ? params.ServiceInstanceId : null;

    }
}

/**
 * DescribeIpGeolocationInfos response structure.
 * @class
 */
class DescribeIpGeolocationInfosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address details
         * @type {Array.<IpGeolocationInfo> || null}
         */
        this.AddressInfo = null;

        /**
         * Number of IP addresses
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddressInfo) {
            this.AddressInfo = new Array();
            for (let z in params.AddressInfo) {
                let obj = new IpGeolocationInfo();
                obj.deserialize(params.AddressInfo[z]);
                this.AddressInfo.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcTaskResult request structure.
 * @class
 */
class DescribeVpcTaskResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `RequestId` returned by an async task
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * AssociateNetworkAclSubnets response structure.
 * @class
 */
class AssociateNetworkAclSubnetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNatGatewayDestinationIpPortTranslationNatRule request structure.
 * @class
 */
class DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The port forwarding rules of the NAT gateway.
         * @type {Array.<DestinationIpPortTranslationNatRule> || null}
         */
        this.DestinationIpPortTranslationNatRules = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.DestinationIpPortTranslationNatRules) {
            this.DestinationIpPortTranslationNatRules = new Array();
            for (let z in params.DestinationIpPortTranslationNatRules) {
                let obj = new DestinationIpPortTranslationNatRule();
                obj.deserialize(params.DestinationIpPortTranslationNatRules[z]);
                this.DestinationIpPortTranslationNatRules.push(obj);
            }
        }

    }
}

/**
 * ResetRoutes request structure.
 * @class
 */
class ResetRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * The route table name. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.RouteTableName = null;

        /**
         * Routing policy.
         * @type {Array.<Route> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteTableName = 'RouteTableName' in params ? params.RouteTableName : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new Route();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * CheckNetDetectState request structure.
 * @class
 */
class CheckNetDetectStateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of detection destination IPv4 addresses, which contains at most two IP addresses.
         * @type {Array.<string> || null}
         */
        this.DetectDestinationIp = null;

        /**
         * ID of a network inspector instance, e.g. netd-12345678. Enter at least one of this parameter, VpcId, SubnetId, and NetDetectName. Use NetDetectId if it is present.
         * @type {string || null}
         */
        this.NetDetectId = null;

        /**
         * ID of a `VPC` instance, e.g. `vpc-12345678`, which is used together with SubnetId and NetDetectName. You should enter either this parameter or NetDetectId, or both. Use NetDetectId if it is present.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * ID of a subnet instance, e.g. `subnet-12345678`, which is used together with VpcId and NetDetectName. You should enter either this parameter or NetDetectId, or both. Use NetDetectId if it is present.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The name of a network inspector, up to 60 bytes in length. It is used together with VpcId and NetDetectName. You should enter either this parameter or NetDetectId, or both. Use NetDetectId if it is present.
         * @type {string || null}
         */
        this.NetDetectName = null;

        /**
         * The type of the next hop. Currently supported types are:
VPN: VPN gateway;
DIRECTCONNECT: direct connect gateway;
PEERCONNECTION: peering connection;
NAT: NAT gateway;
NORMAL_CVM: normal CVM.
         * @type {string || null}
         */
        this.NextHopType = null;

        /**
         * The next-hop destination gateway. The value is related to NextHopType.
If NextHopType is set to VPN, the value of this parameter is the VPN gateway ID, such as vpngw-12345678.
If NextHopType is set to DIRECTCONNECT, the value of this parameter is the direct connect gateway ID, such as dcg-12345678.
If NextHopType is set to PEERCONNECTION, the value of this parameter is the peering connection ID, such as pcx-12345678.
If NextHopType is set to NAT, the value of this parameter is the NAT gateway ID, such as nat-12345678.
If NextHopType is set to NORMAL_CVM, the value of this parameter is the IPv4 address of the CVM, such as 10.0.0.12.
         * @type {string || null}
         */
        this.NextHopDestination = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DetectDestinationIp = 'DetectDestinationIp' in params ? params.DetectDestinationIp : null;
        this.NetDetectId = 'NetDetectId' in params ? params.NetDetectId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.NetDetectName = 'NetDetectName' in params ? params.NetDetectName : null;
        this.NextHopType = 'NextHopType' in params ? params.NextHopType : null;
        this.NextHopDestination = 'NextHopDestination' in params ? params.NextHopDestination : null;

    }
}

/**
 * The association relationships of the route table
 * @class
 */
class RouteTableAssociation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet instance ID.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Route table instance ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

    }
}

/**
 * ModifyCustomerGatewayAttribute request structure.
 * @class
 */
class ModifyCustomerGatewayAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the customer gateway, such as `cgw-2wqq41m9`. You can query the customer gateway by using the [DescribeCustomerGateways](https://intl.cloud.tencent.com/document/api/215/17516?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

        /**
         * Customer gateway can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.CustomerGatewayName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;
        this.CustomerGatewayName = 'CustomerGatewayName' in params ? params.CustomerGatewayName : null;

    }
}

/**
 * DescribeRouteTables response structure.
 * @class
 */
class DescribeRouteTablesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Route table object.
         * @type {Array.<RouteTable> || null}
         */
        this.RouteTableSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RouteTableSet) {
            this.RouteTableSet = new Array();
            for (let z in params.RouteTableSet) {
                let obj = new RouteTable();
                obj.deserialize(params.RouteTableSet[z]);
                this.RouteTableSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteVpcEndPointServiceWhiteList request structure.
 * @class
 */
class DeleteVpcEndPointServiceWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of user UINs
         * @type {Array.<string> || null}
         */
        this.UserUin = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserUin = 'UserUin' in params ? params.UserUin : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;

    }
}

/**
 * DetachSnapshotInstances response structure.
 * @class
 */
class DetachSnapshotInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReplaceSecurityGroupPolicies request structure.
 * @class
 */
class ReplaceSecurityGroupPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through the `DescribeSecurityGroups` API.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Security group policy set object.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

        /**
         * (Optional) The old policy set of the security group, which is used for log records.
         * @type {SecurityGroupPolicySet || null}
         */
        this.OriginalSecurityGroupPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }

        if (params.OriginalSecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.OriginalSecurityGroupPolicySet)
            this.OriginalSecurityGroupPolicySet = obj;
        }

    }
}

/**
 * DeleteVpcEndPointService request structure.
 * @class
 */
class DeleteVpcEndPointServiceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;

    }
}

/**
 * DeleteCcn response structure.
 * @class
 */
class DeleteCcnResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Protocol port template
 * @class
 */
class ServiceTemplate extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port instance ID, such as `ppm-f5n1f8da`.
         * @type {string || null}
         */
        this.ServiceTemplateId = null;

        /**
         * Template name.
         * @type {string || null}
         */
        this.ServiceTemplateName = null;

        /**
         * Protocol port information.
         * @type {Array.<string> || null}
         */
        this.ServiceSet = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Protocol port template information with remarks
         * @type {Array.<ServicesInfo> || null}
         */
        this.ServiceExtraSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateId = 'ServiceTemplateId' in params ? params.ServiceTemplateId : null;
        this.ServiceTemplateName = 'ServiceTemplateName' in params ? params.ServiceTemplateName : null;
        this.ServiceSet = 'ServiceSet' in params ? params.ServiceSet : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.ServiceExtraSet) {
            this.ServiceExtraSet = new Array();
            for (let z in params.ServiceExtraSet) {
                let obj = new ServicesInfo();
                obj.deserialize(params.ServiceExtraSet[z]);
                this.ServiceExtraSet.push(obj);
            }
        }

    }
}

/**
 * DescribeCcnAttachedInstances request structure.
 * @class
 */
class DescribeCcnAttachedInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter conditions:
<li>`ccn-id` - String - The CCN instance ID. </li>
<li>`instance-type` - String - The associated instance type. </li>
<li>`instance-region` - String - The associated instance region. </li>
<li>`instance-id` - String - The instance ID of the associated instance. </li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The ID of the CCN instance
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The order field supports `CcnId`, `InstanceType`, `InstanceId`, `InstanceName`, `InstanceRegion`, `AttachedTime`, and `State`.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Order methods. Ascending: `ASC`, Descending: `DESC`.
         * @type {string || null}
         */
        this.OrderDirection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;

    }
}

/**
 * AttachSnapshotInstances response structure.
 * @class
 */
class AttachSnapshotInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNatGatewaySourceIpTranslationNatRules request structure.
 * @class
 */
class DescribeNatGatewaySourceIpTranslationNatRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the NAT Gateway, such as `nat-123xx454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Filter:
<li>`resource-id`: The subnet ID (such as `subnet-0yi4hekt`) or CVM ID</li>
<li>`public-ip-address`: The EIP, such as `139.199.232.238`</li>
<li>`description` The rule description</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeNatGateways request structure.
 * @class
 */
class DescribeNatGatewaysRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unified ID of the NAT gateways, such as `nat-123xx454`.
         * @type {Array.<string> || null}
         */
        this.NatGatewayIds = null;

        /**
         * Filters. `NatGatewayIds` and `Filters` cannot be specified at the same time.
<li>nat-gateway-id - String - (Filter) The ID of the protocol port template instance, such as `nat-123xx454`.</li>
<li>vpc-id - String - (Filter) The unique ID of the VPC, such as `vpc-123xx454`.</li>
<li>nat-gateway-name - String - (Filter) The ID of the protocol port template instance, such as `test_nat`.</li>
<li>tag-key - String - (Filter) The tag key, such as `test-key`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayIds = 'NatGatewayIds' in params ? params.NatGatewayIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Referred security groups
 * @class
 */
class ReferredSecurityGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group instance ID.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * IDs of all referred security group instances.
         * @type {Array.<string> || null}
         */
        this.ReferredSecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.ReferredSecurityGroupIds = 'ReferredSecurityGroupIds' in params ? params.ReferredSecurityGroupIds : null;

    }
}

/**
 * Cloud virtual machine jumbo frame status.
 * @class
 */
class InstanceJumbo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether the instance supports jumbo frames.
         * @type {boolean || null}
         */
        this.JumboState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.JumboState = 'JumboState' in params ? params.JumboState : null;

    }
}

/**
 * ModifyFlowLogAttribute response structure.
 * @class
 */
class ModifyFlowLogAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBandwidthPackages response structure.
 * @class
 */
class DescribeBandwidthPackagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of eligible bandwidth packages.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Detail information of the bandwidth package.
         * @type {Array.<BandwidthPackage> || null}
         */
        this.BandwidthPackageSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.BandwidthPackageSet) {
            this.BandwidthPackageSet = new Array();
            for (let z in params.BandwidthPackageSet) {
                let obj = new BandwidthPackage();
                obj.deserialize(params.BandwidthPackageSet[z]);
                this.BandwidthPackageSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReplaceSecurityGroupPolicies response structure.
 * @class
 */
class ReplaceSecurityGroupPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDirectConnectGateways request structure.
 * @class
 */
class DescribeDirectConnectGatewaysRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the direct connect gateway, such as `dcg-9o233uri`.
         * @type {Array.<string> || null}
         */
        this.DirectConnectGatewayIds = null;

        /**
         * Filter condition. `DirectConnectGatewayIds` and `Filters` cannot be specified at the same time.
<li>direct-connect-gateway-id - String - The unique ID of the direct connect gateway, such as `dcg-9o233uri`.</li>
<li>direct-connect-gateway-name - String - The name of the direct connect gateway. The default is fuzzy query.</li>
<li>direct-connect-gateway-ip - String - The IP of the direct connect gateway.</li>
<li>gateway-type - String - The gateway type. Valid values: `NORMAL` (Standard type), `NAT` (NAT type).</li>
<li>network-type- String - The network type. Valid values: `VPC` (VPC type), `CCN` (CCN type).</li>
<li>ccn-id - String - The ID of the CCN where the direct connect gateway resides.</li>
<li>vpc-id - String - The ID of the VPC where the direct connect gateway resides.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Max number of results returned
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayIds = 'DirectConnectGatewayIds' in params ? params.DirectConnectGatewayIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DisassociateVpcEndPointSecurityGroups request structure.
 * @class
 */
class DisassociateVpcEndPointSecurityGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of security group IDs
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Endpoint ID
         * @type {string || null}
         */
        this.EndPointId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;

    }
}

/**
 * DescribeIPv6Addresses response structure.
 * @class
 */
class DescribeIPv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of IPv6 meeting conditions.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * IPv6 detailed information list.
         * @type {Array.<Address> || null}
         */
        this.AddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AddressSet) {
            this.AddressSet = new Array();
            for (let z in params.AddressSet) {
                let obj = new Address();
                obj.deserialize(params.AddressSet[z]);
                this.AddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachSnapshotInstances request structure.
 * @class
 */
class AttachSnapshotInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Information of associated instances
         * @type {Array.<SnapshotInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new SnapshotInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * CreateVpcEndPointServiceWhiteList response structure.
 * @class
 */
class CreateVpcEndPointServiceWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceJumbo response structure.
 * @class
 */
class DescribeInstanceJumboResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the jumbo frame status of the cloud virtual machine.
         * @type {Array.<InstanceJumbo> || null}
         */
        this.InstanceJumboSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceJumboSet) {
            this.InstanceJumboSet = new Array();
            for (let z in params.InstanceJumboSet) {
                let obj = new InstanceJumbo();
                obj.deserialize(params.InstanceJumboSet[z]);
                this.InstanceJumboSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIpGeolocationDatabaseUrl response structure.
 * @class
 */
class DescribeIpGeolocationDatabaseUrlResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Download link of an IP location database
         * @type {string || null}
         */
        this.DownLoadUrl = null;

        /**
         * Link expiration time in UTC format following the ISO8601 standard.
         * @type {string || null}
         */
        this.ExpiredAt = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DownLoadUrl = 'DownLoadUrl' in params ? params.DownLoadUrl : null;
        this.ExpiredAt = 'ExpiredAt' in params ? params.ExpiredAt : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNatGatewaySourceIpTranslationNatRules response structure.
 * @class
 */
class DescribeNatGatewaySourceIpTranslationNatRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of objects of a NAT gateway's SNAT rules.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<SourceIpTranslationNatRule> || null}
         */
        this.SourceIpTranslationNatRuleSet = null;

        /**
         * The number of eligible object arrays of a NAT gateway's forwarding rules.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SourceIpTranslationNatRuleSet) {
            this.SourceIpTranslationNatRuleSet = new Array();
            for (let z in params.SourceIpTranslationNatRuleSet) {
                let obj = new SourceIpTranslationNatRule();
                obj.deserialize(params.SourceIpTranslationNatRuleSet[z]);
                this.SourceIpTranslationNatRuleSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcs request structure.
 * @class
 */
class DescribeVpcsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPC instance ID, such as `vpc-f49l6u0z`. Each request supports a maximum of 100 instances. `VpcIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.VpcIds = null;

        /**
         * Filter condition. `VpcIds` and `Filters` cannot be specified at the same time.
Valid filters include:
<li>`vpc-name`: VPC instance name, which supports fuzzy search.</li>
<li>`is-default`: Indicates whether it is the default VPC</li>
<li>`vpc-id`: VPC instance ID, such as `vpc-f49l6u0z`</li>
<li>`cidr-block`: VPC CIDR block</li>
<li>`tag-key`: (Optional) tag key</li>
<li>`tag:tag-key`: (Optional) tag key-value pair. Replace the `tag-key` with a specified tag value. For its usage, refer to Example 2.</li>
  **Note:** If one filter has multiple values, the logical relationship between these values is `OR`. The logical relationship between filters is `AND`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcIds = 'VpcIds' in params ? params.VpcIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * AcceptAttachCcnInstances request structure.
 * @class
 */
class AcceptAttachCcnInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * List of associated instances.
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * CreateNetworkAclQuintupleEntries response structure.
 * @class
 */
class CreateNetworkAclQuintupleEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGatewayFlowMonitorDetail response structure.
 * @class
 */
class DescribeGatewayFlowMonitorDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The gateway traffic monitoring details.
         * @type {Array.<GatewayFlowMonitorDetail> || null}
         */
        this.GatewayFlowMonitorDetailSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.GatewayFlowMonitorDetailSet) {
            this.GatewayFlowMonitorDetailSet = new Array();
            for (let z in params.GatewayFlowMonitorDetailSet) {
                let obj = new GatewayFlowMonitorDetail();
                obj.deserialize(params.GatewayFlowMonitorDetailSet[z]);
                this.GatewayFlowMonitorDetailSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * IP location
 * @class
 */
class IpGeolocationInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Country/region
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Country = null;

        /**
         * Province- or municipality-level administrative region
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Province = null;

        /**
         * Municipal administrative region
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.City = null;

        /**
         * Urban area
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Access ISP
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Isp = null;

        /**
         * ISP backbone network’s AS name
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AsName = null;

        /**
         * ISP backbone network’s AS ID
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AsId = null;

        /**
         * Comment. The APN value of mobile users is entered currently. If there is no APN attribute, this is `null`.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Comment = null;

        /**
         * IP address
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AddressIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Country = 'Country' in params ? params.Country : null;
        this.Province = 'Province' in params ? params.Province : null;
        this.City = 'City' in params ? params.City : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Isp = 'Isp' in params ? params.Isp : null;
        this.AsName = 'AsName' in params ? params.AsName : null;
        this.AsId = 'AsId' in params ? params.AsId : null;
        this.Comment = 'Comment' in params ? params.Comment : null;
        this.AddressIp = 'AddressIp' in params ? params.AddressIp : null;

    }
}

/**
 * DeleteFlowLog request structure.
 * @class
 */
class DeleteFlowLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the flow log.
         * @type {string || null}
         */
        this.FlowLogId = null;

        /**
         * The VPC ID or unique ID of the resource. We recommend using the unique ID. This parameter is required unless a CCN flow log is deleted.
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowLogId = 'FlowLogId' in params ? params.FlowLogId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * The network detection verification result.
 * @class
 */
class NetDetectState extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a network detection instance, such as netd-12345678.
         * @type {string || null}
         */
        this.NetDetectId = null;

        /**
         * The array of network detection destination IP verification results.
         * @type {Array.<NetDetectIpState> || null}
         */
        this.NetDetectIpStateSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetDetectId = 'NetDetectId' in params ? params.NetDetectId : null;

        if (params.NetDetectIpStateSet) {
            this.NetDetectIpStateSet = new Array();
            for (let z in params.NetDetectIpStateSet) {
                let obj = new NetDetectIpState();
                obj.deserialize(params.NetDetectIpStateSet[z]);
                this.NetDetectIpStateSet.push(obj);
            }
        }

    }
}

/**
 * DescribeSnapshotFiles request structure.
 * @class
 */
class DescribeSnapshotFilesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type of associated resource. Values: `securitygroup`
         * @type {string || null}
         */
        this.BusinessType = null;

        /**
         * Service instance ID. It's corresponding to the `BusinessType`. 
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time. Format: %Y-%m-%d %H:%M:%S
         * @type {string || null}
         */
        this.StartDate = null;

        /**
         * End time. Format: %Y-%m-%d %H:%M:%S
         * @type {string || null}
         */
        this.EndDate = null;

        /**
         * Offset. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BusinessType = 'BusinessType' in params ? params.BusinessType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartDate = 'StartDate' in params ? params.StartDate : null;
        this.EndDate = 'EndDate' in params ? params.EndDate : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * HaVipDisassociateAddressIp response structure.
 * @class
 */
class HaVipDisassociateAddressIpResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTaskResult request structure.
 * @class
 */
class DescribeTaskResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Async task ID. Either TaskId or DealName must be entered.
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * Billing order No. Either TaskId or DealName must be entered.
         * @type {string || null}
         */
        this.DealName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.DealName = 'DealName' in params ? params.DealName : null;

    }
}

/**
 * ModifyAddressInternetChargeType response structure.
 * @class
 */
class ModifyAddressInternetChargeTypeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRoutePolicy response structure.
 * @class
 */
class CreateRoutePolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the routing policy ID and rules.
         * @type {RoutePolicy || null}
         */
        this.RoutePolicy = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RoutePolicy) {
            let obj = new RoutePolicy();
            obj.deserialize(params.RoutePolicy)
            this.RoutePolicy = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyIPv6AddressesBandwidth request structure.
 * @class
 */
class ModifyIPv6AddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the EIPv6 address
         * @type {Array.<string> || null}
         */
        this.IPv6AddressIds = null;

        /**
         * Network bandwidth of the EIPv6 address
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressIds = 'IPv6AddressIds' in params ? params.IPv6AddressIds : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

    }
}

/**
 * DeleteVpcEndPointService response structure.
 * @class
 */
class DeleteVpcEndPointServiceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNetworkAclQuintupleEntries response structure.
 * @class
 */
class ModifyNetworkAclQuintupleEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssignIpv6CidrBlock request structure.
 * @class
 */
class AssignIpv6CidrBlockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC`, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * CreateSecurityGroupPolicies response structure.
 * @class
 */
class CreateSecurityGroupPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnassignIpv6CidrBlock response structure.
 * @class
 */
class UnassignIpv6CidrBlockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpnGatewayRoutes request structure.
 * @class
 */
class ModifyVpnGatewayRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the VPN gateway
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Route parameters to modify
         * @type {Array.<VpnGatewayRouteModify> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpnGatewayRouteModify();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * HaVipAssociateAddressIp request structure.
 * @class
 */
class HaVipAssociateAddressIpRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the `HAVIP`, such as `havip-9o233uri`. This must be a `HAVIP` that has not been bound to an `EIP`
         * @type {string || null}
         */
        this.HaVipId = null;

        /**
         * The Elastic `IP`. This must be an `EIP` that has not been bound to a `HAVIP`
         * @type {string || null}
         */
        this.AddressIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipId = 'HaVipId' in params ? params.HaVipId : null;
        this.AddressIp = 'AddressIp' in params ? params.AddressIp : null;

    }
}

/**
 * DisassociateNatGatewayAddress response structure.
 * @class
 */
class DisassociateNatGatewayAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRoutes response structure.
 * @class
 */
class DeleteRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details of the routing policy that has been deleted.
         * @type {Array.<Route> || null}
         */
        this.RouteSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RouteSet) {
            this.RouteSet = new Array();
            for (let z in params.RouteSet) {
                let obj = new Route();
                obj.deserialize(params.RouteSet[z]);
                this.RouteSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCrossBorderCompliance request structure.
 * @class
 */
class DescribeCrossBorderComplianceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * (Exact match) Service provider. Valid values: `UNICOM`.
         * @type {string || null}
         */
        this.ServiceProvider = null;

        /**
         * (Exact match) ID of compliance review request.
         * @type {number || null}
         */
        this.ComplianceId = null;

        /**
         * (Fuzzy match) Company name.
         * @type {string || null}
         */
        this.Company = null;

        /**
         * (Fuzzy match) Unified Social Credit Code.
         * @type {string || null}
         */
        this.UniformSocialCreditCode = null;

        /**
         * (Fuzzy match) Legal person.
         * @type {string || null}
         */
        this.LegalPerson = null;

        /**
         * 
         * @type {string || null}
         */
        this.LegalPersonId = null;

        /**
         * (Fuzzy match) Issuing authority.
         * @type {string || null}
         */
        this.IssuingAuthority = null;

        /**
         * (Fuzzy match) Business address.
         * @type {string || null}
         */
        this.BusinessAddress = null;

        /**
         * (Exact match) Zip code.
         * @type {number || null}
         */
        this.PostCode = null;

        /**
         * (Fuzzy match) Operator.
         * @type {string || null}
         */
        this.Manager = null;

        /**
         * (Exact match) Operator ID card number.
         * @type {string || null}
         */
        this.ManagerId = null;

        /**
         * (Fuzzy match) Operator address.
         * @type {string || null}
         */
        this.ManagerAddress = null;

        /**
         * (Exact match) Operator phone number.
         * @type {string || null}
         */
        this.ManagerTelephone = null;

        /**
         * (Exact match) Email.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * (Exact match) Service start date, such as `2020-07-28`.
         * @type {string || null}
         */
        this.ServiceStartDate = null;

        /**
         * (Exact match) Service end date, such as `2020-07-28`.
         * @type {string || null}
         */
        this.ServiceEndDate = null;

        /**
         * (Exact match) Status. Valid values: `PENDING`, `APPROVED`, and `DENY`.
         * @type {string || null}
         */
        this.State = null;

        /**
         * The offset value
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Quantity of returned items
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceProvider = 'ServiceProvider' in params ? params.ServiceProvider : null;
        this.ComplianceId = 'ComplianceId' in params ? params.ComplianceId : null;
        this.Company = 'Company' in params ? params.Company : null;
        this.UniformSocialCreditCode = 'UniformSocialCreditCode' in params ? params.UniformSocialCreditCode : null;
        this.LegalPerson = 'LegalPerson' in params ? params.LegalPerson : null;
        this.LegalPersonId = 'LegalPersonId' in params ? params.LegalPersonId : null;
        this.IssuingAuthority = 'IssuingAuthority' in params ? params.IssuingAuthority : null;
        this.BusinessAddress = 'BusinessAddress' in params ? params.BusinessAddress : null;
        this.PostCode = 'PostCode' in params ? params.PostCode : null;
        this.Manager = 'Manager' in params ? params.Manager : null;
        this.ManagerId = 'ManagerId' in params ? params.ManagerId : null;
        this.ManagerAddress = 'ManagerAddress' in params ? params.ManagerAddress : null;
        this.ManagerTelephone = 'ManagerTelephone' in params ? params.ManagerTelephone : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.ServiceStartDate = 'ServiceStartDate' in params ? params.ServiceStartDate : null;
        this.ServiceEndDate = 'ServiceEndDate' in params ? params.ServiceEndDate : null;
        this.State = 'State' in params ? params.State : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeSecurityGroupAssociationStatistics response structure.
 * @class
 */
class DescribeSecurityGroupAssociationStatisticsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Statistics on the instances associated with a security group.
         * @type {Array.<SecurityGroupAssociationStatistics> || null}
         */
        this.SecurityGroupAssociationStatisticsSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroupAssociationStatisticsSet) {
            this.SecurityGroupAssociationStatisticsSet = new Array();
            for (let z in params.SecurityGroupAssociationStatisticsSet) {
                let obj = new SecurityGroupAssociationStatistics();
                obj.deserialize(params.SecurityGroupAssociationStatisticsSet[z]);
                this.SecurityGroupAssociationStatisticsSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAssistantCidr response structure.
 * @class
 */
class ModifyAssistantCidrResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of secondary CIDR blocks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<AssistantCidr> || null}
         */
        this.AssistantCidrSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AssistantCidrSet) {
            this.AssistantCidrSet = new Array();
            for (let z in params.AssistantCidrSet) {
                let obj = new AssistantCidr();
                obj.deserialize(params.AssistantCidrSet[z]);
                this.AssistantCidrSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Publishes the routing policy of the VPC subnet to CCN
 * @class
 */
class CidrForCcn extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local CIDR block, including subnet CIDR block and secondary CIDR block
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Cidr = null;

        /**
         * Whether the routing policy of the VPC subnet is published to CCN.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.PublishedToVbc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Cidr = 'Cidr' in params ? params.Cidr : null;
        this.PublishedToVbc = 'PublishedToVbc' in params ? params.PublishedToVbc : null;

    }
}

/**
 * The EIP bound to the NAT gateway
 * @class
 */
class NatGatewayAddress extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the Elastic IP (EIP), such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The public IP address, such as `123.121.34.33`.
         * @type {string || null}
         */
        this.PublicIpAddress = null;

        /**
         * The block status of the resource. `true` indicates the EIP is blocked. `false` indicates that the EIP is not blocked.
         * @type {boolean || null}
         */
        this.IsBlocked = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.PublicIpAddress = 'PublicIpAddress' in params ? params.PublicIpAddress : null;
        this.IsBlocked = 'IsBlocked' in params ? params.IsBlocked : null;

    }
}

/**
 * DescribeVpcEndPointService response structure.
 * @class
 */
class DescribeVpcEndPointServiceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of endpoint services
         * @type {Array.<EndPointService> || null}
         */
        this.EndPointServiceSet = null;

        /**
         * Number of matched results
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.EndPointServiceSet) {
            this.EndPointServiceSet = new Array();
            for (let z in params.EndPointServiceSet) {
                let obj = new EndPointService();
                obj.deserialize(params.EndPointServiceSet[z]);
                this.EndPointServiceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNetworkAclEntries response structure.
 * @class
 */
class ModifyNetworkAclEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpcEndPointAttribute response structure.
 * @class
 */
class ModifyVpcEndPointAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeFlowLog request structure.
 * @class
 */
class DescribeFlowLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the VPC instance.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The unique ID of the flow log.
         * @type {string || null}
         */
        this.FlowLogId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.FlowLogId = 'FlowLogId' in params ? params.FlowLogId : null;

    }
}

/**
 * DescribeIp6Addresses request structure.
 * @class
 */
class DescribeIp6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique IDs that identify IPv6 instances. The unique ID of an IPv6 instance is in the format of `eip-11112222`. Parameters `Ip6AddressIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.Ip6AddressIds = null;

        /**
         * Each request can have up to 10 `Filters` values and 100 `Filter.Values` values. Parameters `AddressIds` and `Filters` cannot be specified at the same time. The specific filter conditions are as follows:
<li>address-ip - String - Required: No - (Filter condition) Filter by the IP address of IPv6 instances.</li>
<li>network-interface-id - String - Required: No - (Filter condition) Filter by the unique ID of ENIs.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip6AddressIds = 'Ip6AddressIds' in params ? params.Ip6AddressIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateRoutePolicy request structure.
 * @class
 */
class CreateRoutePolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Routing policy description.
         * @type {string || null}
         */
        this.RoutePolicyDescription = null;

        /**
         * Specifies the routing strategy name.
         * @type {string || null}
         */
        this.RoutePolicyName = null;

        /**
         * Routing policy entry list.
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyDescription = 'RoutePolicyDescription' in params ? params.RoutePolicyDescription : null;
        this.RoutePolicyName = 'RoutePolicyName' in params ? params.RoutePolicyName : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }

    }
}

/**
 * DescribeAccountAttributes request structure.
 * @class
 */
class DescribeAccountAttributesRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeAccountAttributes response structure.
 * @class
 */
class DescribeAccountAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * User account attribute object
         * @type {Array.<AccountAttribute> || null}
         */
        this.AccountAttributeSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AccountAttributeSet) {
            this.AccountAttributeSet = new Array();
            for (let z in params.AccountAttributeSet) {
                let obj = new AccountAttribute();
                obj.deserialize(params.AccountAttributeSet[z]);
                this.AccountAttributeSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAddressesRenewFlag request structure.
 * @class
 */
class ModifyAddressesRenewFlagRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique EIP IDs, for example, eip-xxxx.
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

        /**
         * Auto-renewal flag.
<ul style="margin:0">
<li>NOTIFY_AND_AUTO_RENEW: Notify upon expiration and automatically renew.</li>
<li>NOTIFY_AND_MANUAL_RENEW: Notify upon expiration but do not automatically renew.</li>
<li>DISABLE_NOTIFY_AND_MANUAL_RENEW: Do not notify upon expiration and do not automatically renew.</li>
</ul>
If this parameter is set to NOTIFY_AND_AUTO_RENEW and the account balance is sufficient, the instance will be automatically renewed on a monthly basis after expiration.
         * @type {string || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * AssignPrivateIpAddresses response structure.
 * @class
 */
class AssignPrivateIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The detailed information of the Private IP.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PrivateIpAddressSet) {
            this.PrivateIpAddressSet = new Array();
            for (let z in params.PrivateIpAddressSet) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddressSet[z]);
                this.PrivateIpAddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroups request structure.
 * @class
 */
class DescribeSecurityGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group ID, such as `sg-33ocnj9n`. Each request can contain up to 100 instances at a time. `SecurityGroupIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Filter conditions. `SecurityGroupIds` and `Filters` cannot be specified at the same time.
<li>security-group-id - String - (Filter condition) The security group ID.</li>
<li>project-id - Integer - (Filter condition) The project ID.</li>
<li>security-group-name - String - (Filter condition) The security group name.</li>
<li>tag-key - String - Required: no - (Filter condition) Filters by tag key. For more information, see Example 2.</li>
<li> `tag:tag-key` - String - Required: no - (Filter condition) Filters by tag key pair. For this parameter, `tag-key` will be replaced with a specific tag key. For more information, see Example 3.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {string || null}
         */
        this.Limit = null;

        /**
         * Sorting field. Values: `CreatedTime`, `UpdateTime` Note: This field does not have default value.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Sorting method Order methods. Ascending: `ASC`, Descending: `DESC`. Default: `ASC`
         * @type {string || null}
         */
        this.OrderDirection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;

    }
}

/**
 * RefreshDirectConnectGatewayRouteToNatGateway request structure.
 * @class
 */
class RefreshDirectConnectGatewayRouteToNatGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The NAT gateway ID.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Whether it is pre-refresh. Valid values: `True` (yes) and `False` (no)
         * @type {boolean || null}
         */
        this.DryRun = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.DryRun = 'DryRun' in params ? params.DryRun : null;

    }
}

/**
 * DescribeNatGatewayDestinationIpPortTranslationNatRules request structure.
 * @class
 */
class DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * NAT gateway ID.
         * @type {Array.<string> || null}
         */
        this.NatGatewayIds = null;

        /**
         * Filters:
`NatGatewayIds` and `Filters` cannot be specified at the same time.
<li> `nat-gateway-id`: The NAT gateway ID, such as `nat-0yi4hekt`.</li>
<li> `vpc-id`: The VPC ID, such as `vpc-0yi4hekt`.</li>
<li> `public-ip-address`: The EIP, such as `139.199.232.238`.</li>
<li>`public-port`: The public network port.</li>
<li>`private-ip-address`: The private IP, such as `10.0.0.1`.</li>
<li>`private-port`. The private network port.</li>
<li>`description`. The rule description.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayIds = 'NatGatewayIds' in params ? params.NatGatewayIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ReturnNormalAddresses request structure.
 * @class
 */
class ReturnNormalAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EIP addresses. Example: 101.35.139.183
         * @type {Array.<string> || null}
         */
        this.AddressIps = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIps = 'AddressIps' in params ? params.AddressIps : null;

    }
}

/**
 * ModifyNetworkAclAttribute response structure.
 * @class
 */
class ModifyNetworkAclAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReplaceRoutePolicyEntries response structure.
 * @class
 */
class ReplaceRoutePolicyEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddBandwidthPackageResources response structure.
 * @class
 */
class AddBandwidthPackageResourcesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateNetworkAclSubnets response structure.
 * @class
 */
class DisassociateNetworkAclSubnetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetCcnRegionBandwidthLimits request structure.
 * @class
 */
class SetCcnRegionBandwidthLimitsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The outbound bandwidth cap of each CCN region.
         * @type {Array.<CcnRegionBandwidthLimit> || null}
         */
        this.CcnRegionBandwidthLimits = null;

        /**
         * Whether to restore the region outbound bandwidth limit or inter-region bandwidth limit to default 1 Gbps. Valid values: `false` (no); `true` (yes). Default value: `false`. When the parameter is set to `true`, the CCN instance created will not be displayed in the console.
         * @type {boolean || null}
         */
        this.SetDefaultLimitFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.CcnRegionBandwidthLimits) {
            this.CcnRegionBandwidthLimits = new Array();
            for (let z in params.CcnRegionBandwidthLimits) {
                let obj = new CcnRegionBandwidthLimit();
                obj.deserialize(params.CcnRegionBandwidthLimits[z]);
                this.CcnRegionBandwidthLimits.push(obj);
            }
        }
        this.SetDefaultLimitFlag = 'SetDefaultLimitFlag' in params ? params.SetDefaultLimitFlag : null;

    }
}

/**
 * ModifyAddressInternetChargeType request structure.
 * @class
 */
class ModifyAddressInternetChargeTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique EIP ID, such as "eip-xxxx"
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The target billing method. It can be `BANDWIDTH_PREPAID_BY_MONTH` or `TRAFFIC_POSTPAID_BY_HOUR`
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * The target bandwidth value
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Billing details of monthly-subscribed network bandwidth. This parameter is required if the target billing method is `BANDWIDTH_PREPAID_BY_MONTH`.
         * @type {AddressChargePrepaid || null}
         */
        this.AddressChargePrepaid = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

        if (params.AddressChargePrepaid) {
            let obj = new AddressChargePrepaid();
            obj.deserialize(params.AddressChargePrepaid)
            this.AddressChargePrepaid = obj;
        }

    }
}

/**
 * ModifyIp6AddressesBandwidth request structure.
 * @class
 */
class ModifyIp6AddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Modified target bandwidth, in Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * IPv6 addresses. Both Ip6Addresses and Ip6AddressId are required, but they cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.Ip6Addresses = null;

        /**
         * Unique IDs corresponding to the IPv6 addresses. Format: eip-xxxxxxxx. Both Ip6Addresses and Ip6AddressId are required, but they cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.Ip6AddressIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.Ip6Addresses = 'Ip6Addresses' in params ? params.Ip6Addresses : null;
        this.Ip6AddressIds = 'Ip6AddressIds' in params ? params.Ip6AddressIds : null;

    }
}

/**
 * CreateLocalGateway request structure.
 * @class
 */
class CreateLocalGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local gateway name
         * @type {string || null}
         */
        this.LocalGatewayName = null;

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocalGatewayName = 'LocalGatewayName' in params ? params.LocalGatewayName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;

    }
}

/**
 * DescribeDirectConnectGateways response structure.
 * @class
 */
class DescribeDirectConnectGatewaysResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of eligible objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The object array of the direct connect gateway.
         * @type {Array.<DirectConnectGateway> || null}
         */
        this.DirectConnectGatewaySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.DirectConnectGatewaySet) {
            this.DirectConnectGatewaySet = new Array();
            for (let z in params.DirectConnectGatewaySet) {
                let obj = new DirectConnectGateway();
                obj.deserialize(params.DirectConnectGatewaySet[z]);
                this.DirectConnectGatewaySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpnGatewayRoutes request structure.
 * @class
 */
class CreateVpnGatewayRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPN gateway ID
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Destination route list of a VPN gateway
         * @type {Array.<VpnGatewayRoute> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpnGatewayRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * CreateSecurityGroupWithPolicies response structure.
 * @class
 */
class CreateSecurityGroupWithPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group object.
         * @type {SecurityGroup || null}
         */
        this.SecurityGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroup) {
            let obj = new SecurityGroup();
            obj.deserialize(params.SecurityGroup)
            this.SecurityGroup = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAddressTemplate response structure.
 * @class
 */
class DeleteAddressTemplateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResumeSnapshotInstance response structure.
 * @class
 */
class ResumeSnapshotInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySubnetAttribute response structure.
 * @class
 */
class ModifySubnetAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResetNatGatewayConnection request structure.
 * @class
 */
class ResetNatGatewayConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The NAT gateway ID.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Concurrent connections cap of the NAT gateway, such as 1000000, 3000000, 10000000.
         * @type {number || null}
         */
        this.MaxConcurrentConnection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.MaxConcurrentConnection = 'MaxConcurrentConnection' in params ? params.MaxConcurrentConnection : null;

    }
}

/**
 * ModifyCcnAttachedInstancesAttribute request structure.
 * @class
 */
class ModifyCcnAttachedInstancesAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CCN instance ID in the format of `ccn-f49l6u0z`
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * List of associated network instances
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * DeleteAddressTemplate request structure.
 * @class
 */
class DeleteAddressTemplateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The IP address template instance ID, such as `ipm-09o5m8kc`.
         * @type {string || null}
         */
        this.AddressTemplateId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateId = 'AddressTemplateId' in params ? params.AddressTemplateId : null;

    }
}

/**
 * CreateNatGatewaySourceIpTranslationNatRule request structure.
 * @class
 */
class CreateNatGatewaySourceIpTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT Gateway, such as `nat-df45454`
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The SNAT forwarding rule of the NAT Gateway
         * @type {Array.<SourceIpTranslationNatRule> || null}
         */
        this.SourceIpTranslationNatRules = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.SourceIpTranslationNatRules) {
            this.SourceIpTranslationNatRules = new Array();
            for (let z in params.SourceIpTranslationNatRules) {
                let obj = new SourceIpTranslationNatRule();
                obj.deserialize(params.SourceIpTranslationNatRules[z]);
                this.SourceIpTranslationNatRules.push(obj);
            }
        }

    }
}

/**
 * ENI
 * @class
 */
class NetworkInterface extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-f1xjkw1b`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * ENI Name
         * @type {string || null}
         */
        this.NetworkInterfaceName = null;

        /**
         * ENI description.
         * @type {string || null}
         */
        this.NetworkInterfaceDescription = null;

        /**
         * Subnet instance ID.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Bound security group.
         * @type {Array.<string> || null}
         */
        this.GroupSet = null;

        /**
         * Whether it is the primary ENI.
         * @type {boolean || null}
         */
        this.Primary = null;

        /**
         * MAC address
         * @type {string || null}
         */
        this.MacAddress = null;

        /**
         * ENI status:
<li>`PENDING`: Creating</li>
<li>`AVAILABLE`: Available</li>
<li>`ATTACHING`: Binding</li>
<li>`DETACHING`: Unbinding</li>
<li>`DELETING`: Deleting</li>
         * @type {string || null}
         */
        this.State = null;

        /**
         * Private IP information.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddressSet = null;

        /**
         * Bound CVM object.
Note: This field may return null, indicating no valid value.
         * @type {NetworkInterfaceAttachment || null}
         */
        this.Attachment = null;

        /**
         * Availability Zone.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The `IPv6` address list.
         * @type {Array.<Ipv6Address> || null}
         */
        this.Ipv6AddressSet = null;

        /**
         * Tag key-value pair.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * The ENI type. 0: ENI. 1: EVM ENI.
         * @type {number || null}
         */
        this.EniType = null;

        /**
         * Type of the resource bound with an ENI. Valid values: cvm, eks.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Business = null;

        /**
         * ID of the CDC instance associated with the ENI
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * ENI type. Valid values: `0` (standard); `1` (extension). Default value: `0`.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AttachType = null;

        /**
         * The ID of resource to retain the ENI primary IP. It’s used as the request parameters for deleting an ENI.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Service level
<li>`DEFAULT`: Default level</lil>
<li>`PT`: Gold</li>
<li>`AU`: Silver</li>
<li>`AG`: Bronze</li>
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.QosLevel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.NetworkInterfaceName = 'NetworkInterfaceName' in params ? params.NetworkInterfaceName : null;
        this.NetworkInterfaceDescription = 'NetworkInterfaceDescription' in params ? params.NetworkInterfaceDescription : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.GroupSet = 'GroupSet' in params ? params.GroupSet : null;
        this.Primary = 'Primary' in params ? params.Primary : null;
        this.MacAddress = 'MacAddress' in params ? params.MacAddress : null;
        this.State = 'State' in params ? params.State : null;

        if (params.PrivateIpAddressSet) {
            this.PrivateIpAddressSet = new Array();
            for (let z in params.PrivateIpAddressSet) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddressSet[z]);
                this.PrivateIpAddressSet.push(obj);
            }
        }

        if (params.Attachment) {
            let obj = new NetworkInterfaceAttachment();
            obj.deserialize(params.Attachment)
            this.Attachment = obj;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.Ipv6AddressSet) {
            this.Ipv6AddressSet = new Array();
            for (let z in params.Ipv6AddressSet) {
                let obj = new Ipv6Address();
                obj.deserialize(params.Ipv6AddressSet[z]);
                this.Ipv6AddressSet.push(obj);
            }
        }

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.EniType = 'EniType' in params ? params.EniType : null;
        this.Business = 'Business' in params ? params.Business : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.AttachType = 'AttachType' in params ? params.AttachType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;

    }
}

/**
 * TransformAddress request structure.
 * @class
 */
class TransformAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the instance with a common public IP to be operated on, such as `ins-11112222`. You can query the instance ID by logging into the [CVM console](https://console.cloud.tencent.com/cvm). You can also obtain the parameter value from the `InstanceId` field in the returned result of the API [DescribeInstances](https://intl.cloud.tencent.com/document/product/213/33256).
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ReplaceDirectConnectGatewayCcnRoutes request structure.
 * @class
 */
class ReplaceDirectConnectGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the Direct Connect gateway, such as `dcg-prpqlmg1`
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The list of IDC IP range that must be connected
         * @type {Array.<DirectConnectGatewayCcnRoute> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new DirectConnectGatewayCcnRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * DescribeRoutePolicyEntries response structure.
 * @class
 */
class DescribeRoutePolicyEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route reception policy entry list.
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAddressTemplateAttribute request structure.
 * @class
 */
class ModifyAddressTemplateAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address template instance ID, such as `ipm-mdunqeb6`.
         * @type {string || null}
         */
        this.AddressTemplateId = null;

        /**
         * IP address template name.
         * @type {string || null}
         */
        this.AddressTemplateName = null;

        /**
         * Address information, including IP, CIDR and IP address range.
         * @type {Array.<string> || null}
         */
        this.Addresses = null;

        /**
         * Address information with remarks, including the IP, CIDR block or IP address range.
         * @type {Array.<AddressInfo> || null}
         */
        this.AddressesExtra = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateId = 'AddressTemplateId' in params ? params.AddressTemplateId : null;
        this.AddressTemplateName = 'AddressTemplateName' in params ? params.AddressTemplateName : null;
        this.Addresses = 'Addresses' in params ? params.Addresses : null;

        if (params.AddressesExtra) {
            this.AddressesExtra = new Array();
            for (let z in params.AddressesExtra) {
                let obj = new AddressInfo();
                obj.deserialize(params.AddressesExtra[z]);
                this.AddressesExtra.push(obj);
            }
        }

    }
}

/**
 * ModifyRoutePolicyAttribute request structure.
 * @class
 */
class ModifyRoutePolicyAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the route reception policy, such as rrp-dz0219jq.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Specifies the route reception policy name.
         * @type {string || null}
         */
        this.RoutePolicyName = null;

        /**
         * Describes the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;
        this.RoutePolicyName = 'RoutePolicyName' in params ? params.RoutePolicyName : null;
        this.RoutePolicyDescription = 'RoutePolicyDescription' in params ? params.RoutePolicyDescription : null;

    }
}

/**
 * CreateNatGateway response structure.
 * @class
 */
class CreateNatGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * NAT gateway object array.
         * @type {Array.<NatGateway> || null}
         */
        this.NatGatewaySet = null;

        /**
         * The number of eligible NAT gateway objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NatGatewaySet) {
            this.NatGatewaySet = new Array();
            for (let z in params.NatGatewaySet) {
                let obj = new NatGateway();
                obj.deserialize(params.NatGatewaySet[z]);
                this.NatGatewaySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResetRoutePolicyAssociations request structure.
 * @class
 */
class ResetRoutePolicyAssociationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Routing table instance ID, e.g., rtb-azd4dt1c.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * The list of routing policy binding objects (RoutePolicyAssociation). note: the route table instance ID (RouteTableId) in the binding must match the RouteTableId parameter of this API (that is, this API only supports modifying the strategy binding relationship and priority within the same route table instance).
         * @type {Array.<RoutePolicyAssociation> || null}
         */
        this.RoutePolicyAssociationSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

        if (params.RoutePolicyAssociationSet) {
            this.RoutePolicyAssociationSet = new Array();
            for (let z in params.RoutePolicyAssociationSet) {
                let obj = new RoutePolicyAssociation();
                obj.deserialize(params.RoutePolicyAssociationSet[z]);
                this.RoutePolicyAssociationSet.push(obj);
            }
        }

    }
}

/**
 * DescribeVpcs response structure.
 * @class
 */
class DescribeVpcsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The VPC object.
         * @type {Array.<Vpc> || null}
         */
        this.VpcSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.VpcSet) {
            this.VpcSet = new Array();
            for (let z in params.VpcSet) {
                let obj = new Vpc();
                obj.deserialize(params.VpcSet[z]);
                this.VpcSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySecurityGroupAttribute request structure.
 * @class
 */
class ModifySecurityGroupAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Security group can be named freely, but cannot exceed 60 characters.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * The remarks for the security group. The maximum length is 100 characters.
         * @type {string || null}
         */
        this.GroupDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupDescription = 'GroupDescription' in params ? params.GroupDescription : null;

    }
}

/**
 * ModifyNetDetect request structure.
 * @class
 */
class ModifyNetDetectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a network detection instance, such as `netd-12345678`.
         * @type {string || null}
         */
        this.NetDetectId = null;

        /**
         * The name of a network detection instance. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetDetectName = null;

        /**
         * The array of detection destination IPv4 addresses, which contains at most two IP addresses.
         * @type {Array.<string> || null}
         */
        this.DetectDestinationIp = null;

        /**
         * Type of the next hop. Valid values:
`VPN`: VPN gateway;
`DIRECTCONNECT`: Direct connect gateway;
`PEERCONNECTION`: Peering connection;
`NAT`: NAT gateway;
`NORMAL_CVM`: CVM instance;
`CCN`: CCN instance;
`NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopType = null;

        /**
         * ID of the next-hop gateway.
If NextHopType is set to VPN, the value of this parameter is the VPN gateway ID, such as vpngw-12345678.
`NextHopType` = `DIRECTCONNECT`: Direct connect gateway ID, such as `dcg-12345678`.
`NextHopType` = `PEERCONNECTION`: Peering connection ID, such as `pcx-12345678`.
`NextHopType` = `NAT`: NAT gateway ID, such as `nat-12345678`.
If NextHopType is set to NORMAL_CVM, the value of this parameter is the IPv4 address of the CVM, such as 10.0.0.12.
`NextHopType` = `CCN`: CCN instance ID, such as `ccn-12345678`.
`NextHopType` = `NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopDestination = null;

        /**
         * Network detection description.
         * @type {string || null}
         */
        this.NetDetectDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetDetectId = 'NetDetectId' in params ? params.NetDetectId : null;
        this.NetDetectName = 'NetDetectName' in params ? params.NetDetectName : null;
        this.DetectDestinationIp = 'DetectDestinationIp' in params ? params.DetectDestinationIp : null;
        this.NextHopType = 'NextHopType' in params ? params.NextHopType : null;
        this.NextHopDestination = 'NextHopDestination' in params ? params.NextHopDestination : null;
        this.NetDetectDescription = 'NetDetectDescription' in params ? params.NetDetectDescription : null;

    }
}

/**
 * DescribeSgSnapshotFileContent response structure.
 * @class
 */
class DescribeSgSnapshotFileContentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Snapshot file ID
         * @type {string || null}
         */
        this.SnapshotFileId = null;

        /**
         * Backup time
         * @type {string || null}
         */
        this.BackupTime = null;

        /**
         * Operator
         * @type {string || null}
         */
        this.Operator = null;

        /**
         * Original data
         * @type {Array.<SecurityGroupPolicy> || null}
         */
        this.OriginalData = null;

        /**
         * Backup data
         * @type {Array.<SecurityGroupPolicy> || null}
         */
        this.BackupData = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.SnapshotFileId = 'SnapshotFileId' in params ? params.SnapshotFileId : null;
        this.BackupTime = 'BackupTime' in params ? params.BackupTime : null;
        this.Operator = 'Operator' in params ? params.Operator : null;

        if (params.OriginalData) {
            this.OriginalData = new Array();
            for (let z in params.OriginalData) {
                let obj = new SecurityGroupPolicy();
                obj.deserialize(params.OriginalData[z]);
                this.OriginalData.push(obj);
            }
        }

        if (params.BackupData) {
            this.BackupData = new Array();
            for (let z in params.BackupData) {
                let obj = new SecurityGroupPolicy();
                obj.deserialize(params.BackupData[z]);
                this.BackupData.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetDetectStates response structure.
 * @class
 */
class DescribeNetDetectStatesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of network detection verification results that meet requirements.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NetDetectState> || null}
         */
        this.NetDetectStateSet = null;

        /**
         * The number of network detection verification results that meet requirements.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetDetectStateSet) {
            this.NetDetectStateSet = new Array();
            for (let z in params.NetDetectStateSet) {
                let obj = new NetDetectState();
                obj.deserialize(params.NetDetectStateSet[z]);
                this.NetDetectStateSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcResourceDashboard response structure.
 * @class
 */
class DescribeVpcResourceDashboardResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of resource objects.
         * @type {Array.<ResourceDashboard> || null}
         */
        this.ResourceDashboardSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ResourceDashboardSet) {
            this.ResourceDashboardSet = new Array();
            for (let z in params.ResourceDashboardSet) {
                let obj = new ResourceDashboard();
                obj.deserialize(params.ResourceDashboardSet[z]);
                this.ResourceDashboardSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AllocateIp6AddressesBandwidth response structure.
 * @class
 */
class AllocateIp6AddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique IDs of Classic elastic Public IPv6 instances.
         * @type {Array.<string> || null}
         */
        this.AddressSet = null;

        /**
         * Asynchronous task ID. You can call the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressSet = 'AddressSet' in params ? params.AddressSet : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetDetectStates request structure.
 * @class
 */
class DescribeNetDetectStatesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of network probe IDs, such as [`netd-12345678`].
         * @type {Array.<string> || null}
         */
        this.NetDetectIds = null;

        /**
         * Filter conditions. `NetDetectIds` and `Filters` cannot be specified at the same time.
<li>`net-detect-id` - String - The network probe ID, such as `netd-12345678`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The offset. Default: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned values. Default: 20. Maximum: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetDetectIds = 'NetDetectIds' in params ? params.NetDetectIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeFlowLog response structure.
 * @class
 */
class DescribeFlowLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The flow log information.
         * @type {Array.<FlowLog> || null}
         */
        this.FlowLog = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.FlowLog) {
            this.FlowLog = new Array();
            for (let z in params.FlowLog) {
                let obj = new FlowLog();
                obj.deserialize(params.FlowLog[z]);
                this.FlowLog.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRoutePolicyEntries response structure.
 * @class
 */
class DeleteRoutePolicyEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBandwidthPackages request structure.
 * @class
 */
class DescribeBandwidthPackagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID list of bandwidth packages.
         * @type {Array.<string> || null}
         */
        this.BandwidthPackageIds = null;

        /**
         * Each request can have up to 10 `Filters`. parameters do not support specifying `BandwidthPackageIds` and `Filters` at the same time. detailed filter criteria are as follows:.
<li>bandwidth-package-id - String - required: no - (filter condition) filter by the unique id of the bandwidth package.</li>.
<li>bandwidth-package-name - String - required: no - (filter criteria) filter by bandwidth package name. fuzzy filtering is not supported.</li>.
<li>network-type - String - required: no - (filter condition) filter by bandwidth package type. network type can be found in [BandwidthPackage](https://intl.cloud.tencent.com/document/api/215/15824?from_cn_redirect=1#BandwidthPackage).</li>.
<li>- charge-type - String - required: no - (filter condition) filter by the billing type of the bandwidth package. the billing type can be found in BandwidthPackage (https://intl.cloud.tencent.com/document/api/215/15824?from_cn_redirect=1#BandwidthPackage).</li>.
<li>resource.resource-type - String - required: no - (filter criteria) filter by bandwidth package resource type. resource types include 'Address' and 'LoadBalance'.</li>.
<li>resource.resource-id - String - required: no - (filter criteria) filter by bandwidth package resource id. resource id is in the format of 'eip-xxxx','lb-xxxx'.</li>.
<li>resource.address-ip - String - required: no - filter by bandwidth package resource ip.</li>.
<li>tag-key - String - required: no - (filter condition) filter according to the tag key.</li>.
<li>`tag-value` - String - Optional - Filter by the tag value.</li>

<li>tag:tag-key - String - required: no - (filter condition) filter by tag key-value pair. replace tag-key with a specific tag key.</li>.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. This value defaults to 0. For more information on Offset, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of bandwidth packages returned. This value defaults to 20. The maximum is 100. For more information on Limit, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageIds = 'BandwidthPackageIds' in params ? params.BandwidthPackageIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteDirectConnectGatewayCcnRoutes response structure.
 * @class
 */
class DeleteDirectConnectGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAssistantCidr response structure.
 * @class
 */
class DescribeAssistantCidrResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * A set of eligible secondary CIDR blocks
Note: This field may return null, indicating that no valid value was found.
         * @type {Array.<AssistantCidr> || null}
         */
        this.AssistantCidrSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AssistantCidrSet) {
            this.AssistantCidrSet = new Array();
            for (let z in params.AssistantCidrSet) {
                let obj = new AssistantCidr();
                obj.deserialize(params.AssistantCidrSet[z]);
                this.AssistantCidrSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Details of scheduled snapshot policy
 * @class
 */
class BackupPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled backup day. Values: `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday`.
         * @type {string || null}
         */
        this.BackupDay = null;

        /**
         * Backup point in time. Format: HH:mm:ss.
         * @type {string || null}
         */
        this.BackupTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BackupDay = 'BackupDay' in params ? params.BackupDay : null;
        this.BackupTime = 'BackupTime' in params ? params.BackupTime : null;

    }
}

/**
 * Information of resources bound with the queried IPs
 * @class
 */
class IpAddressStates extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * IP address
         * @type {string || null}
         */
        this.IpAddress = null;

        /**
         * Resource type
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Resource ID
         * @type {string || null}
         */
        this.ResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.IpAddress = 'IpAddress' in params ? params.IpAddress : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;

    }
}

/**
 * Statistics used to describe the instance
 * @class
 */
class InstanceStatistic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type of instance
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Number of instances
         * @type {number || null}
         */
        this.InstanceCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceCount = 'InstanceCount' in params ? params.InstanceCount : null;

    }
}

/**
 * Public IP Inquiry Output Parameters
 * @class
 */
class InternetPriceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Postpaid unit price. Unit: USD. Returned only for postpaid price inquiry.
         * @type {number || null}
         */
        this.UnitPrice = null;

        /**
         * Discounted price. Unit: USD
Note: This field may return null, indicating that no valid value was found.
         * @type {number || null}
         */
        this.DiscountPrice = null;

        /**
         * Billing unit. Valid values: <ul> <li>HOUR: Indicates that the billing unit is calculated hourly. The scenarios currently involving this billing unit include TRAFFIC_POSTPAID_BY_HOUR and BANDWIDTH_POSTPAID_BY_HOUR.</li></ul>
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.ChargeUnit = null;

        /**
         * Original price. Unit: USD. Returned only for prepaid price inquiry.
         * @type {number || null}
         */
        this.OriginalPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UnitPrice = 'UnitPrice' in params ? params.UnitPrice : null;
        this.DiscountPrice = 'DiscountPrice' in params ? params.DiscountPrice : null;
        this.ChargeUnit = 'ChargeUnit' in params ? params.ChargeUnit : null;
        this.OriginalPrice = 'OriginalPrice' in params ? params.OriginalPrice : null;

    }
}

/**
 * CreateVpnConnection request structure.
 * @class
 */
class CreateVpnConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The ID of the customer gateway, such as `cgw-2wqq41m9`. You can query the customer gateway by using the [DescribeCustomerGateways](https://intl.cloud.tencent.com/document/product/215/17516?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

        /**
         * Gateway can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.VpnConnectionName = null;

        /**
         * The pre-shared key.
         * @type {string || null}
         */
        this.PreShareKey = null;

        /**
         * VPC instance ID, which can be obtained from the `VpcId` field in the response of the [`DescribeVpcs`](https://intl.cloud.tencent.com/document/product/215/15778?from_cn_redirect=1) API.
This parameter is optional for a CCN-based VPN tunnel.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The SPD policy group, for example: {"10.0.0.5/24":["172.123.10.5/16"]}. 10.0.0.5/24 is the VPC internal IP range, and 172.123.10.5/16 is the IDC IP range. The user specifies the IP range in the VPC that can communicate with the IP range in the IDC.
         * @type {Array.<SecurityPolicyDatabase> || null}
         */
        this.SecurityPolicyDatabases = null;

        /**
         * Internet Key Exchange (IKE) configuration. IKE has a self-protection mechanism. The network security protocol is configured by the user.
         * @type {IKEOptionsSpecification || null}
         */
        this.IKEOptionsSpecification = null;

        /**
         * IPSec configuration. The IPSec secure session configuration is provided by Tencent Cloud.
         * @type {IPSECOptionsSpecification || null}
         */
        this.IPSECOptionsSpecification = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Whether the tunnel health check is supported. The default value is `False`.
         * @type {boolean || null}
         */
        this.EnableHealthCheck = null;

        /**
         * Local IP of health check. It defaults to a random IP within 169.254.128.0/17.
         * @type {string || null}
         */
        this.HealthCheckLocalIp = null;

        /**
         * Peer IP of health check. It defaults to a random IP within 169.254.128.0/17.
         * @type {string || null}
         */
        this.HealthCheckRemoteIp = null;

        /**
         * Tunnel type. Valid values: `STATIC`, `StaticRoute`, and `Policy`.
         * @type {string || null}
         */
        this.RouteType = null;

        /**
         * Negotiation type. Valid values: `active` (default value), `passive` and `flowTrigger`.
         * @type {string || null}
         */
        this.NegotiationType = null;

        /**
         * Specifies whether to enable DPD. Valid values: `0` (disable) and `1` (enable)
         * @type {number || null}
         */
        this.DpdEnable = null;

        /**
         * DPD timeout period. Default: 30; unit: second. If the request is not responded within this period, the peer end is considered not exists. This parameter is valid when the value of `DpdEnable` is 1. 
         * @type {string || null}
         */
        this.DpdTimeout = null;

        /**
         * The action after DPD timeout. Valid values: `clear` (disconnect) and `restart` (try again). It’s valid when `DpdEnable` is `1`. 
         * @type {string || null}
         */
        this.DpdAction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;
        this.VpnConnectionName = 'VpnConnectionName' in params ? params.VpnConnectionName : null;
        this.PreShareKey = 'PreShareKey' in params ? params.PreShareKey : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

        if (params.SecurityPolicyDatabases) {
            this.SecurityPolicyDatabases = new Array();
            for (let z in params.SecurityPolicyDatabases) {
                let obj = new SecurityPolicyDatabase();
                obj.deserialize(params.SecurityPolicyDatabases[z]);
                this.SecurityPolicyDatabases.push(obj);
            }
        }

        if (params.IKEOptionsSpecification) {
            let obj = new IKEOptionsSpecification();
            obj.deserialize(params.IKEOptionsSpecification)
            this.IKEOptionsSpecification = obj;
        }

        if (params.IPSECOptionsSpecification) {
            let obj = new IPSECOptionsSpecification();
            obj.deserialize(params.IPSECOptionsSpecification)
            this.IPSECOptionsSpecification = obj;
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.EnableHealthCheck = 'EnableHealthCheck' in params ? params.EnableHealthCheck : null;
        this.HealthCheckLocalIp = 'HealthCheckLocalIp' in params ? params.HealthCheckLocalIp : null;
        this.HealthCheckRemoteIp = 'HealthCheckRemoteIp' in params ? params.HealthCheckRemoteIp : null;
        this.RouteType = 'RouteType' in params ? params.RouteType : null;
        this.NegotiationType = 'NegotiationType' in params ? params.NegotiationType : null;
        this.DpdEnable = 'DpdEnable' in params ? params.DpdEnable : null;
        this.DpdTimeout = 'DpdTimeout' in params ? params.DpdTimeout : null;
        this.DpdAction = 'DpdAction' in params ? params.DpdAction : null;

    }
}

/**
 * The CCN routing policy object
 * @class
 */
class CcnRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the routing policy
         * @type {string || null}
         */
        this.RouteId = null;

        /**
         * Destination
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

        /**
         * The type of the next hop (associated instance type). Available types: VPC, DIRECTCONNECT
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * The next hop (associated instance)
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The name of the next hop (associated instance name)
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * The region of the next hop (the region of the associated instance)
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * Update Time
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Whether the route is enabled
         * @type {boolean || null}
         */
        this.Enabled = null;

        /**
         * The UIN (root account) to which the associated instance belongs
         * @type {string || null}
         */
        this.InstanceUin = null;

        /**
         * Additional status of the route
         * @type {string || null}
         */
        this.ExtraState = null;

        /**
         * Whether it is a dynamic route
         * @type {boolean || null}
         */
        this.IsBgp = null;

        /**
         * Route priority
         * @type {number || null}
         */
        this.RoutePriority = null;

        /**
         * Next hop port name (associated instance’s port name)
         * @type {string || null}
         */
        this.InstanceExtraName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.InstanceUin = 'InstanceUin' in params ? params.InstanceUin : null;
        this.ExtraState = 'ExtraState' in params ? params.ExtraState : null;
        this.IsBgp = 'IsBgp' in params ? params.IsBgp : null;
        this.RoutePriority = 'RoutePriority' in params ? params.RoutePriority : null;
        this.InstanceExtraName = 'InstanceExtraName' in params ? params.InstanceExtraName : null;

    }
}

/**
 * ModifyIpv6AddressesAttribute response structure.
 * @class
 */
class ModifyIpv6AddressesAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTrafficPackages request structure.
 * @class
 */
class DescribeTrafficPackagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Traffic package IDs. Multiple values can be used.
         * @type {Array.<string> || null}
         */
        this.TrafficPackageIds = null;

        /**
         * Each request can have up to 10 `Filters`. `TrafficPackageIds` and `Filters` cannot be specified at the same time. The specific filter conditions are as follows:
<li> `traffic-package_id` - String - Optional - Filter by the traffic package ID.</li>
<li> `traffic-package-name` - String - Optional - Filter by the traffic package name. Fuzzy match is not supported.</li>
<li> `status` - String - Optional - Filter by the traffic package status. Values: [AVAILABLE|EXPIRED|EXHAUSTED].</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Pagination parameter
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination parameter
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TrafficPackageIds = 'TrafficPackageIds' in params ? params.TrafficPackageIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteSecurityGroupPolicies request structure.
 * @class
 */
class DeleteSecurityGroupPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * The policy set of the security group. One request can only delete one or more policies in one direction. Both PolicyIndex-matching deletion and security group policy-matching deletion methods are supported. Each request can use only one matching method.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }

    }
}

/**
 * VPN tunnel object.
 * @class
 */
class VpnConnection extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tunnel instance ID.
         * @type {string || null}
         */
        this.VpnConnectionId = null;

        /**
         * Tunnel name.
         * @type {string || null}
         */
        this.VpnConnectionName = null;

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Customer gateway instance ID.
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

        /**
         * The pre-shared key.
         * @type {string || null}
         */
        this.PreShareKey = null;

        /**
         * Tunnel transmission protocol.
         * @type {string || null}
         */
        this.VpnProto = null;

        /**
         * Tunnel encryption protocol.
         * @type {string || null}
         */
        this.EncryptProto = null;

        /**
         * Route Type.
         * @type {string || null}
         */
        this.RouteType = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Production status of the tunnel. PENDING: Creating; AVAILABLE: Running; DELETING: Deleting.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Connection status of the tunnel. AVAILABLE: Connected.
         * @type {string || null}
         */
        this.NetStatus = null;

        /**
         * SPD.
         * @type {Array.<SecurityPolicyDatabase> || null}
         */
        this.SecurityPolicyDatabaseSet = null;

        /**
         * IKE options.
         * @type {IKEOptionsSpecification || null}
         */
        this.IKEOptionsSpecification = null;

        /**
         * IPSEC options.
         * @type {IPSECOptionsSpecification || null}
         */
        this.IPSECOptionsSpecification = null;

        /**
         * Whether the health check is supported.
         * @type {boolean || null}
         */
        this.EnableHealthCheck = null;

        /**
         * Local IP address for the health check
         * @type {string || null}
         */
        this.HealthCheckLocalIp = null;

        /**
         * Peer IP address for the health check
         * @type {string || null}
         */
        this.HealthCheckRemoteIp = null;

        /**
         * Tunnel health check status. Valid values: AVAILABLE: healthy; UNAVAILABLE: unhealthy. This parameter will be returned only after health check is enabled.
         * @type {string || null}
         */
        this.HealthCheckStatus = null;

        /**
         * Whether to enable DPD. Values: `0` (Disable) and `1` (Enable)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DpdEnable = null;

        /**
         * DPD timeout period. 
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DpdTimeout = null;

        /**
         * The action to take in case of DPD timeout. Values: `clear` (Disconnect) and `restart` (retry). This parameter only takes effect when `DpdEnable` is set to `1`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DpdAction = null;

        /**
         * Array of tag key-value pairs
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Negotiation type
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NegotiationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnConnectionId = 'VpnConnectionId' in params ? params.VpnConnectionId : null;
        this.VpnConnectionName = 'VpnConnectionName' in params ? params.VpnConnectionName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;
        this.PreShareKey = 'PreShareKey' in params ? params.PreShareKey : null;
        this.VpnProto = 'VpnProto' in params ? params.VpnProto : null;
        this.EncryptProto = 'EncryptProto' in params ? params.EncryptProto : null;
        this.RouteType = 'RouteType' in params ? params.RouteType : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.State = 'State' in params ? params.State : null;
        this.NetStatus = 'NetStatus' in params ? params.NetStatus : null;

        if (params.SecurityPolicyDatabaseSet) {
            this.SecurityPolicyDatabaseSet = new Array();
            for (let z in params.SecurityPolicyDatabaseSet) {
                let obj = new SecurityPolicyDatabase();
                obj.deserialize(params.SecurityPolicyDatabaseSet[z]);
                this.SecurityPolicyDatabaseSet.push(obj);
            }
        }

        if (params.IKEOptionsSpecification) {
            let obj = new IKEOptionsSpecification();
            obj.deserialize(params.IKEOptionsSpecification)
            this.IKEOptionsSpecification = obj;
        }

        if (params.IPSECOptionsSpecification) {
            let obj = new IPSECOptionsSpecification();
            obj.deserialize(params.IPSECOptionsSpecification)
            this.IPSECOptionsSpecification = obj;
        }
        this.EnableHealthCheck = 'EnableHealthCheck' in params ? params.EnableHealthCheck : null;
        this.HealthCheckLocalIp = 'HealthCheckLocalIp' in params ? params.HealthCheckLocalIp : null;
        this.HealthCheckRemoteIp = 'HealthCheckRemoteIp' in params ? params.HealthCheckRemoteIp : null;
        this.HealthCheckStatus = 'HealthCheckStatus' in params ? params.HealthCheckStatus : null;
        this.DpdEnable = 'DpdEnable' in params ? params.DpdEnable : null;
        this.DpdTimeout = 'DpdTimeout' in params ? params.DpdTimeout : null;
        this.DpdAction = 'DpdAction' in params ? params.DpdAction : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.NegotiationType = 'NegotiationType' in params ? params.NegotiationType : null;

    }
}

/**
 * DescribeCcns request structure.
 * @class
 */
class DescribeCcnsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`. Each request can have a maximum of 100 instances. `CcnIds` and `Filters` cannot be specified at the same time
         * @type {Array.<string> || null}
         */
        this.CcnIds = null;

        /**
         * Filter conditions. `CcnIds` and `Filters` cannot be specified at the same time.
<li>ccn-id - String - (Filter condition) The unique ID of the CCN, such as `vpc-f49l6u0z`.</li>
<li>ccn-name - String - (Filter condition) The CCN name.</li>
<li>ccn-description - String - (Filter condition) CCN description.</li>
<li>state - String - (Filter condition) The instance status. 'ISOLATED': Isolated (the account is in arrears and the service is suspended.) 'AVAILABLE': Running.</li>
<li>tag-key - String - Required: no - (Filter condition) Filters by tag key.</li>
<li>`tag:tag-key` - String - Required: no - (Filter condition) Filters by tag key pair. For this parameter, `tag-key` will be replaced with a specific tag key. For more information, see this example: **Querying the list of CCNs bound to tags**.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Order fields support `CcnId`, `CcnName`, `CreateTime`, `State`, and `QosLevel`
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Order methods. Ascending: `ASC`, Descending: `DESC`.
         * @type {string || null}
         */
        this.OrderDirection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnIds = 'CcnIds' in params ? params.CcnIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;

    }
}

/**
 * ModifyNatGatewayAttribute response structure.
 * @class
 */
class ModifyNatGatewayAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetDetects request structure.
 * @class
 */
class DescribeNetDetectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of network probe IDs, such as [`netd-12345678`].
         * @type {Array.<string> || null}
         */
        this.NetDetectIds = null;

        /**
         * Filter conditions. `NetDetectIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - (Filter condition) The VPC instance ID, such as vpc-12345678.</li>
<li>net-detect-id - String - (Filter condition) The network detection instance ID, such as netd-12345678.</li>
<li>subnet-id - String - (Filter condition) The subnet instance ID, such as subnet-12345678.</li>
<li>net-detect-name - String - (Filter condition) The network detection name.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The offset. Default: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned values. Default: 20. Maximum: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetDetectIds = 'NetDetectIds' in params ? params.NetDetectIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateAddressTemplateGroup request structure.
 * @class
 */
class CreateAddressTemplateGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name of the IP address template group
         * @type {string || null}
         */
        this.AddressTemplateGroupName = null;

        /**
         * IP address template instance ID, such as `ipm-mdunqeb6`.
         * @type {Array.<string> || null}
         */
        this.AddressTemplateIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateGroupName = 'AddressTemplateGroupName' in params ? params.AddressTemplateGroupName : null;
        this.AddressTemplateIds = 'AddressTemplateIds' in params ? params.AddressTemplateIds : null;

    }
}

/**
 * AssociateIPv6Address request structure.
 * @class
 */
class AssociateIPv6AddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the EIPv6, such as eipv6-11112222.
         * @type {string || null}
         */
        this.IPv6AddressId = null;

        /**
         * ID of the ENI to be bound, such as eni-11112222. NetworkInterfaceId and InstanceId cannot be specified at the same time. The ENI ID can be queried by logging in to the console or obtained from the networkInterfaceId field in the returned value of the DescribeNetworkInterfaces API.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * Private IPv6 to be bound. If NetworkInterfaceId is specified, PrivateIPv6Address must also be specified, which indicates that the EIP will be bound to the specified private IPv6 of the specified ENI. At the same time, it shall be ensured that the specified PrivateIPv6Address is a private IPv6 on the specified NetworkInterfaceId. The specified ENI's private IPv6 can be queried by logging in to the console or obtained from the Ipv6AddressSet.Address field in the returned value of the DescribeNetworkInterfaces API.
         * @type {string || null}
         */
        this.PrivateIPv6Address = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressId = 'IPv6AddressId' in params ? params.IPv6AddressId : null;
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.PrivateIPv6Address = 'PrivateIPv6Address' in params ? params.PrivateIPv6Address : null;

    }
}

/**
 * DescribeCustomerGatewayVendors response structure.
 * @class
 */
class DescribeCustomerGatewayVendorsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Customer gateway vendor information object.
         * @type {Array.<CustomerGatewayVendor> || null}
         */
        this.CustomerGatewayVendorSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CustomerGatewayVendorSet) {
            this.CustomerGatewayVendorSet = new Array();
            for (let z in params.CustomerGatewayVendorSet) {
                let obj = new CustomerGatewayVendor();
                obj.deserialize(params.CustomerGatewayVendorSet[z]);
                this.CustomerGatewayVendorSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSubnet response structure.
 * @class
 */
class DeleteSubnetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EnableSnapshotPolicies response structure.
 * @class
 */
class EnableSnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Virtual Private Cloud (VPC) object.
 * @class
 */
class Vpc extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` name.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * `VPC` instance `ID`, such as `vpc-azd4dt1c`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The `IPv4` `CIDR` of the `VPC`.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Whether it is the default `VPC`.
         * @type {boolean || null}
         */
        this.IsDefault = null;

        /**
         * Whether multicast is enabled.
         * @type {boolean || null}
         */
        this.EnableMulticast = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * `DNS` list.
         * @type {Array.<string> || null}
         */
        this.DnsServerSet = null;

        /**
         * DHCP domain name option value.
         * @type {string || null}
         */
        this.DomainName = null;

        /**
         * `DHCP` option set `ID`.
         * @type {string || null}
         */
        this.DhcpOptionsId = null;

        /**
         * Whether `DHCP` is enabled.
         * @type {boolean || null}
         */
        this.EnableDhcp = null;

        /**
         * The `IPv6` `CIDR` of the `VPC`.
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

        /**
         * Tag key-value pair
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Auxiliary CIDR
         * @type {Array.<AssistantCidr> || null}
         */
        this.AssistantCidrSet = null;

        /**
         * Vpc association with CCN route publish policy. true: enables cidr route publishing. false: enables subnet route publishing. default is subnet route publishing when creating a vpc. to select cidr route publishing, submit a ticket for adding to allowlist.
         * @type {boolean || null}
         */
        this.EnableRouteVpcPublish = null;

        /**
         * Returns the multi-operator IPv6 Cidr Block.
         * @type {Array.<ISPIPv6CidrBlock> || null}
         */
        this.Ipv6CidrBlockSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.EnableMulticast = 'EnableMulticast' in params ? params.EnableMulticast : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.DnsServerSet = 'DnsServerSet' in params ? params.DnsServerSet : null;
        this.DomainName = 'DomainName' in params ? params.DomainName : null;
        this.DhcpOptionsId = 'DhcpOptionsId' in params ? params.DhcpOptionsId : null;
        this.EnableDhcp = 'EnableDhcp' in params ? params.EnableDhcp : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

        if (params.AssistantCidrSet) {
            this.AssistantCidrSet = new Array();
            for (let z in params.AssistantCidrSet) {
                let obj = new AssistantCidr();
                obj.deserialize(params.AssistantCidrSet[z]);
                this.AssistantCidrSet.push(obj);
            }
        }
        this.EnableRouteVpcPublish = 'EnableRouteVpcPublish' in params ? params.EnableRouteVpcPublish : null;

        if (params.Ipv6CidrBlockSet) {
            this.Ipv6CidrBlockSet = new Array();
            for (let z in params.Ipv6CidrBlockSet) {
                let obj = new ISPIPv6CidrBlock();
                obj.deserialize(params.Ipv6CidrBlockSet[z]);
                this.Ipv6CidrBlockSet.push(obj);
            }
        }

    }
}

/**
 * CreateVpnGateway response structure.
 * @class
 */
class CreateVpnGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPN gateway object.
         * @type {VpnGateway || null}
         */
        this.VpnGateway = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VpnGateway) {
            let obj = new VpnGateway();
            obj.deserialize(params.VpnGateway)
            this.VpnGateway = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNatGatewayDestinationIpPortTranslationNatRules response structure.
 * @class
 */
class DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The object array of port forwarding rules for the NAT gateway.
         * @type {Array.<NatGatewayDestinationIpPortTranslationNatRule> || null}
         */
        this.NatGatewayDestinationIpPortTranslationNatRuleSet = null;

        /**
         * The number of eligible object arrays of NAT port forwarding rules.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NatGatewayDestinationIpPortTranslationNatRuleSet) {
            this.NatGatewayDestinationIpPortTranslationNatRuleSet = new Array();
            for (let z in params.NatGatewayDestinationIpPortTranslationNatRuleSet) {
                let obj = new NatGatewayDestinationIpPortTranslationNatRule();
                obj.deserialize(params.NatGatewayDestinationIpPortTranslationNatRuleSet[z]);
                this.NatGatewayDestinationIpPortTranslationNatRuleSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Flow log storage information
 * @class
 */
class FlowLogStorage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Storage instance ID, which is required when `StorageType` is `ckafka`.
         * @type {string || null}
         */
        this.StorageId = null;

        /**
         * Topic ID, which is required when `StorageType` is `ckafka`.
Note: this field may return `null`, indicating that no valid value can be found.
         * @type {string || null}
         */
        this.StorageTopic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StorageId = 'StorageId' in params ? params.StorageId : null;
        this.StorageTopic = 'StorageTopic' in params ? params.StorageTopic : null;

    }
}

/**
 * DeleteRoutePolicy response structure.
 * @class
 */
class DeleteRoutePolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcIpv6Addresses response structure.
 * @class
 */
class DescribeVpcIpv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `IPv6` address list.
         * @type {Array.<VpcIpv6Address> || null}
         */
        this.Ipv6AddressSet = null;

        /**
         * The total number of `IPv6` addresses.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ipv6AddressSet) {
            this.Ipv6AddressSet = new Array();
            for (let z in params.Ipv6AddressSet) {
                let obj = new VpcIpv6Address();
                obj.deserialize(params.Ipv6AddressSet[z]);
                this.Ipv6AddressSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RejectAttachCcnInstances request structure.
 * @class
 */
class RejectAttachCcnInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The list of instances whose association is rejected.
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * ModifyCcnRegionBandwidthLimitsType request structure.
 * @class
 */
class ModifyCcnRegionBandwidthLimitsTypeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * CCN instance ID.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * CCN bandwidth limit type. INTER_REGION_LIMIT: limit between regions. OUTER_REGION_LIMIT: region egress limit.
         * @type {string || null}
         */
        this.BandwidthLimitType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.BandwidthLimitType = 'BandwidthLimitType' in params ? params.BandwidthLimitType : null;

    }
}

/**
 * Destination routes of a VPN gateway
 * @class
 */
class VpnGatewayRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * Destination IDC IP range
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

        /**
         * Next hop type (type of the associated instance). Valid values: `VPNCONN` (VPN tunnel) and `CCN` (CCN instance)
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance ID of the next hop
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Priority. Valid values: `0` and `100`
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Status. Valid values: `ENABLE` and `DISABLE`
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Route ID
         * @type {string || null}
         */
        this.RouteId = null;

        /**
         * Route type. Valid values: `VPC`, `CCN` (CCN-propagated route), `Static`, and `BGP`.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * The creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * The update time.
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * DescribeVpcResourceDashboard request structure.
 * @class
 */
class DescribeVpcResourceDashboardRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Vpc instance ID, e.g. vpc-f1xjkw1b.
         * @type {Array.<string> || null}
         */
        this.VpcIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcIds = 'VpcIds' in params ? params.VpcIds : null;

    }
}

/**
 * Result of a VPC-related task
 * @class
 */
class VpcTaskResultDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource ID 
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Status
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * ReplaceRouteTableAssociation request structure.
 * @class
 */
class ReplaceRouteTableAssociationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet instance ID, such as `subnet-3x5lf5q0`. This can be queried using the DescribeSubnets API.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

    }
}

/**
 * AssociateNetworkAclSubnets request structure.
 * @class
 */
class AssociateNetworkAclSubnetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Array of subnet instance IDs, such as [subnet-12345678]
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;

    }
}

/**
 * ResetRoutePolicyEntries response structure.
 * @class
 */
class ResetRoutePolicyEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CheckAssistantCidr request structure.
 * @class
 */
class CheckAssistantCidrRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` instance `ID`, e.g. `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Load CIDR blocks to add. CIDR block set; format: e.g. ["10.0.0.0/16", "172.16.0.0/16"]
         * @type {Array.<string> || null}
         */
        this.NewCidrBlocks = null;

        /**
         * Load CIDR blocks to delete. CIDR block set; Format: e.g. ["10.0.0.0/16", "172.16.0.0/16"]
         * @type {Array.<string> || null}
         */
        this.OldCidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NewCidrBlocks = 'NewCidrBlocks' in params ? params.NewCidrBlocks : null;
        this.OldCidrBlocks = 'OldCidrBlocks' in params ? params.OldCidrBlocks : null;

    }
}

/**
 * RenewVpnGateway request structure.
 * @class
 */
class RenewVpnGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Billing Methods
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }

    }
}

/**
 * AssociateIPv6Address response structure.
 * @class
 */
class AssociateIPv6AddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSnapshotPolicies request structure.
 * @class
 */
class DescribeSnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {Array.<string> || null}
         */
        this.SnapshotPolicyIds = null;

        /**
         * Filter conditions. `SnapshotPolicyIds` and `Filters` cannot be both specified.
<li>`snapshot-policy-id` - String - Snapshot policy ID</li>
<li>`snapshot-policy-name` - String - Snapshot policy name</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 200.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyIds = 'SnapshotPolicyIds' in params ? params.SnapshotPolicyIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteTrafficPackages request structure.
 * @class
 */
class DeleteTrafficPackagesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID array of traffic packages to delete
         * @type {Array.<string> || null}
         */
        this.TrafficPackageIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TrafficPackageIds = 'TrafficPackageIds' in params ? params.TrafficPackageIds : null;

    }
}

/**
 * NotifyRoutes request structure.
 * @class
 */
class NotifyRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the route table
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * The unique ID of the route
         * @type {Array.<string> || null}
         */
        this.RouteItemIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteItemIds = 'RouteItemIds' in params ? params.RouteItemIds : null;

    }
}

/**
 * DeleteVpc request structure.
 * @class
 */
class DeleteVpcRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance. You can obtain the parameter value from the VpcId field in the returned result of DescribeVpcs API.
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * ModifyServiceTemplateAttribute response structure.
 * @class
 */
class ModifyServiceTemplateAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCcns response structure.
 * @class
 */
class DescribeCcnsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * CCN object.
         * @type {Array.<CCN> || null}
         */
        this.CcnSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.CcnSet) {
            this.CcnSet = new Array();
            for (let z in params.CcnSet) {
                let obj = new CCN();
                obj.deserialize(params.CcnSet[z]);
                this.CcnSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSubnet response structure.
 * @class
 */
class CreateSubnetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet object.
         * @type {Subnet || null}
         */
        this.Subnet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Subnet) {
            let obj = new Subnet();
            obj.deserialize(params.Subnet)
            this.Subnet = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroupPolicies response structure.
 * @class
 */
class DescribeSecurityGroupPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group policy set.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGatewayFlowQos response structure.
 * @class
 */
class DescribeGatewayFlowQosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of instance details
         * @type {Array.<GatewayQos> || null}
         */
        this.GatewayQosSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.GatewayQosSet) {
            this.GatewayQosSet = new Array();
            for (let z in params.GatewayQosSet) {
                let obj = new GatewayQos();
                obj.deserialize(params.GatewayQosSet[z]);
                this.GatewayQosSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySecurityGroupPolicies request structure.
 * @class
 */
class ModifySecurityGroupPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * The security group policy set. SecurityGroupPolicySet object must specify new egress and ingress policies at the same time. SecurityGroupPolicy object does not support custom index (PolicyIndex).
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

        /**
         * Whether the security group rule is sorted. Default value: False. If it is set to `True`, security group rules will be strictly sorted according to the sequence specified in the `SecurityGroupPolicySet` parameter. Manual entry may cause omission, so we recommend sorting security group rules in the console.
         * @type {boolean || null}
         */
        this.SortPolicys = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }
        this.SortPolicys = 'SortPolicys' in params ? params.SortPolicys : null;

    }
}

/**
 * NAT gateway object.
 * @class
 */
class NatGateway extends  AbstractModel {
    constructor(){
        super();

        /**
         * NAT gateway ID.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * NAT gateway name.
         * @type {string || null}
         */
        this.NatGatewayName = null;

        /**
         * NAT gateway creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The status of the NAT gateway.
 `PENDING`: Being created, `DELETING`: Being deleted, `AVAILABLE`: Running, `UPDATING`: Being upgraded,
`FAILED`: Failed.
         * @type {string || null}
         */
        this.State = null;

        /**
         * The maximum outbound bandwidth of the gateway. Unit: Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * The concurrent connections cap of the gateway.
         * @type {number || null}
         */
        this.MaxConcurrentConnection = null;

        /**
         * The public IP object array of the bound NAT gateway.
         * @type {Array.<NatGatewayAddress> || null}
         */
        this.PublicIpAddressSet = null;

        /**
         * The NAT gateway status. `AVAILABLE`: Operating, `UNAVAILABLE`: Unavailable, `INSUFFICIENT`: Service suspended due to account overdue.
         * @type {string || null}
         */
        this.NetworkState = null;

        /**
         * The port forwarding rules of the NAT gateway.
         * @type {Array.<DestinationIpPortTranslationNatRule> || null}
         */
        this.DestinationIpPortTranslationNatRuleSet = null;

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The availability zone in which the NAT gateway is located.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * ID of the direct connect gateway bound.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DirectConnectGatewayIds = null;

        /**
         * Subnet ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Tag key-value pairs.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * The list of the security groups bound to the NAT Gateway
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupSet = null;

        /**
         * SNAT forwarding rule of the NAT gateway.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<SourceIpTranslationNatRule> || null}
         */
        this.SourceIpTranslationNatRuleSet = null;

        /**
         * Whether the NAT gateway is dedicated.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsExclusive = null;

        /**
         * Bandwidth of the gateway cluster where the dedicated NAT Gateway resides. Unit: Mbps. This field does not exist when the `IsExclusive` field is set to `false`.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExclusiveGatewayBandwidth = null;

        /**
         * Whether the NAT gateway is blocked. Values: `NORMAL`, `RESTRICTED`
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RestrictState = null;

        /**
         * NAT gateway major version. `1`: Classic, `2`: Standard
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NatProductVersion = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.SmartScheduleMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.NatGatewayName = 'NatGatewayName' in params ? params.NatGatewayName : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.State = 'State' in params ? params.State : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.MaxConcurrentConnection = 'MaxConcurrentConnection' in params ? params.MaxConcurrentConnection : null;

        if (params.PublicIpAddressSet) {
            this.PublicIpAddressSet = new Array();
            for (let z in params.PublicIpAddressSet) {
                let obj = new NatGatewayAddress();
                obj.deserialize(params.PublicIpAddressSet[z]);
                this.PublicIpAddressSet.push(obj);
            }
        }
        this.NetworkState = 'NetworkState' in params ? params.NetworkState : null;

        if (params.DestinationIpPortTranslationNatRuleSet) {
            this.DestinationIpPortTranslationNatRuleSet = new Array();
            for (let z in params.DestinationIpPortTranslationNatRuleSet) {
                let obj = new DestinationIpPortTranslationNatRule();
                obj.deserialize(params.DestinationIpPortTranslationNatRuleSet[z]);
                this.DestinationIpPortTranslationNatRuleSet.push(obj);
            }
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.DirectConnectGatewayIds = 'DirectConnectGatewayIds' in params ? params.DirectConnectGatewayIds : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.SecurityGroupSet = 'SecurityGroupSet' in params ? params.SecurityGroupSet : null;

        if (params.SourceIpTranslationNatRuleSet) {
            this.SourceIpTranslationNatRuleSet = new Array();
            for (let z in params.SourceIpTranslationNatRuleSet) {
                let obj = new SourceIpTranslationNatRule();
                obj.deserialize(params.SourceIpTranslationNatRuleSet[z]);
                this.SourceIpTranslationNatRuleSet.push(obj);
            }
        }
        this.IsExclusive = 'IsExclusive' in params ? params.IsExclusive : null;
        this.ExclusiveGatewayBandwidth = 'ExclusiveGatewayBandwidth' in params ? params.ExclusiveGatewayBandwidth : null;
        this.RestrictState = 'RestrictState' in params ? params.RestrictState : null;
        this.NatProductVersion = 'NatProductVersion' in params ? params.NatProductVersion : null;
        this.SmartScheduleMode = 'SmartScheduleMode' in params ? params.SmartScheduleMode : null;

    }
}

/**
 * ReplaceRoutes request structure.
 * @class
 */
class ReplaceRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Routing policy object. The routing policy ID (RouteId) must be specified.
         * @type {Array.<Route> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new Route();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * CreateCustomerGateway response structure.
 * @class
 */
class CreateCustomerGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Customer gateway object
         * @type {CustomerGateway || null}
         */
        this.CustomerGateway = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CustomerGateway) {
            let obj = new CustomerGateway();
            obj.deserialize(params.CustomerGateway)
            this.CustomerGateway = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of a traffic package
 * @class
 */
class TrafficPackage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique traffic package ID
         * @type {string || null}
         */
        this.TrafficPackageId = null;

        /**
         * Traffic package name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TrafficPackageName = null;

        /**
         * Traffic package size in GB
         * @type {number || null}
         */
        this.TotalAmount = null;

        /**
         * Traffic package balance in GB
         * @type {number || null}
         */
        this.RemainingAmount = null;

        /**
         * Traffic package status. Valid values: `AVAILABLE`, `EXPIRED`, `EXHAUSTED`, `REFUNDED`, `DELETED`
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Traffic package creation time
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Traffic package expiration time
         * @type {string || null}
         */
        this.Deadline = null;

        /**
         * Used traffic in GB
         * @type {number || null}
         */
        this.UsedAmount = null;

        /**
         * Traffic package tag
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Traffic package type (idle-time or full-time)
         * @type {string || null}
         */
        this.DeductType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TrafficPackageId = 'TrafficPackageId' in params ? params.TrafficPackageId : null;
        this.TrafficPackageName = 'TrafficPackageName' in params ? params.TrafficPackageName : null;
        this.TotalAmount = 'TotalAmount' in params ? params.TotalAmount : null;
        this.RemainingAmount = 'RemainingAmount' in params ? params.RemainingAmount : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.Deadline = 'Deadline' in params ? params.Deadline : null;
        this.UsedAmount = 'UsedAmount' in params ? params.UsedAmount : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.DeductType = 'DeductType' in params ? params.DeductType : null;

    }
}

/**
 * WithdrawNotifyRoutes request structure.
 * @class
 */
class WithdrawNotifyRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the route table
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * The unique ID of the routing policy
         * @type {Array.<string> || null}
         */
        this.RouteItemIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteItemIds = 'RouteItemIds' in params ? params.RouteItemIds : null;

    }
}

/**
 * VPC resource dashboard (all resource counts)
 * @class
 */
class ResourceDashboard extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID, such as `vpc-bq4bzxpj`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID, such as subnet-bthucmmy.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Classiclink.
         * @type {number || null}
         */
        this.Classiclink = null;

        /**
         * Direct Connect gateway.
         * @type {number || null}
         */
        this.Dcg = null;

        /**
         * Peering connection.
         * @type {number || null}
         */
        this.Pcx = null;

        /**
         * Total number of used IPs except for CVM IP, EIP and network probe IP. The three IP types will be independently counted.
         * @type {number || null}
         */
        this.Ip = null;

        /**
         * NAT gateway.
         * @type {number || null}
         */
        this.Nat = null;

        /**
         * VPN gateway.
         * @type {number || null}
         */
        this.Vpngw = null;

        /**
         * Flow log.
         * @type {number || null}
         */
        this.FlowLog = null;

        /**
         * Network probing.
         * @type {number || null}
         */
        this.NetworkDetect = null;

        /**
         * Network ACL.
         * @type {number || null}
         */
        this.NetworkACL = null;

        /**
         * Cloud Virtual Machine.
         * @type {number || null}
         */
        this.CVM = null;

        /**
         * Load balancer.
         * @type {number || null}
         */
        this.LB = null;

        /**
         * Relational database.
         * @type {number || null}
         */
        this.CDB = null;

        /**
         * TencentDB for Memcached.
         * @type {number || null}
         */
        this.Cmem = null;

        /**
         * Cloud time series database.
         * @type {number || null}
         */
        this.CTSDB = null;

        /**
         * TencentDB for MariaDB (TDSQL).
         * @type {number || null}
         */
        this.MariaDB = null;

        /**
         * TencentDB for SQL Server.
         * @type {number || null}
         */
        this.SQLServer = null;

        /**
         * TencentDB for PostgreSQL.
         * @type {number || null}
         */
        this.Postgres = null;

        /**
         * Network attached storage.
         * @type {number || null}
         */
        this.NAS = null;

        /**
         * Snova data warehouse.
         * @type {number || null}
         */
        this.Greenplumn = null;

        /**
         * Cloud Kafka (CKafka).
         * @type {number || null}
         */
        this.Ckafka = null;

        /**
         * Grocery.
         * @type {number || null}
         */
        this.Grocery = null;

        /**
         * Data encryption service.
         * @type {number || null}
         */
        this.HSM = null;

        /**
         * Game storage - Tcaplus.
         * @type {number || null}
         */
        this.Tcaplus = null;

        /**
         * Cnas.
         * @type {number || null}
         */
        this.Cnas = null;

        /**
         * HTAP database - TiDB.
         * @type {number || null}
         */
        this.TiDB = null;

        /**
         * EMR cluster.
         * @type {number || null}
         */
        this.Emr = null;

        /**
         * SEAL.
         * @type {number || null}
         */
        this.SEAL = null;

        /**
         * Cloud file storage - CFS.
         * @type {number || null}
         */
        this.CFS = null;

        /**
         * Oracle.
         * @type {number || null}
         */
        this.Oracle = null;

        /**
         * ElasticSearch Service.
         * @type {number || null}
         */
        this.ElasticSearch = null;

        /**
         * Blockchain service.
         * @type {number || null}
         */
        this.TBaaS = null;

        /**
         * Itop.
         * @type {number || null}
         */
        this.Itop = null;

        /**
         * Cloud database audit.
         * @type {number || null}
         */
        this.DBAudit = null;

        /**
         * Enterprise TencentDB - CynosDB for Postgres.
         * @type {number || null}
         */
        this.CynosDBPostgres = null;

        /**
         * TencentDB for Redis.
         * @type {number || null}
         */
        this.Redis = null;

        /**
         * TencentDB for MongoDB.
         * @type {number || null}
         */
        this.MongoDB = null;

        /**
         * A distributed cloud database - TencentDB for TDSQL.
         * @type {number || null}
         */
        this.DCDB = null;

        /**
         * An enterprise-grade TencentDB - CynosDB for MySQL.
         * @type {number || null}
         */
        this.CynosDBMySQL = null;

        /**
         * Subnets.
         * @type {number || null}
         */
        this.Subnet = null;

        /**
         * Route table.
         * @type {number || null}
         */
        this.RouteTable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Classiclink = 'Classiclink' in params ? params.Classiclink : null;
        this.Dcg = 'Dcg' in params ? params.Dcg : null;
        this.Pcx = 'Pcx' in params ? params.Pcx : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Nat = 'Nat' in params ? params.Nat : null;
        this.Vpngw = 'Vpngw' in params ? params.Vpngw : null;
        this.FlowLog = 'FlowLog' in params ? params.FlowLog : null;
        this.NetworkDetect = 'NetworkDetect' in params ? params.NetworkDetect : null;
        this.NetworkACL = 'NetworkACL' in params ? params.NetworkACL : null;
        this.CVM = 'CVM' in params ? params.CVM : null;
        this.LB = 'LB' in params ? params.LB : null;
        this.CDB = 'CDB' in params ? params.CDB : null;
        this.Cmem = 'Cmem' in params ? params.Cmem : null;
        this.CTSDB = 'CTSDB' in params ? params.CTSDB : null;
        this.MariaDB = 'MariaDB' in params ? params.MariaDB : null;
        this.SQLServer = 'SQLServer' in params ? params.SQLServer : null;
        this.Postgres = 'Postgres' in params ? params.Postgres : null;
        this.NAS = 'NAS' in params ? params.NAS : null;
        this.Greenplumn = 'Greenplumn' in params ? params.Greenplumn : null;
        this.Ckafka = 'Ckafka' in params ? params.Ckafka : null;
        this.Grocery = 'Grocery' in params ? params.Grocery : null;
        this.HSM = 'HSM' in params ? params.HSM : null;
        this.Tcaplus = 'Tcaplus' in params ? params.Tcaplus : null;
        this.Cnas = 'Cnas' in params ? params.Cnas : null;
        this.TiDB = 'TiDB' in params ? params.TiDB : null;
        this.Emr = 'Emr' in params ? params.Emr : null;
        this.SEAL = 'SEAL' in params ? params.SEAL : null;
        this.CFS = 'CFS' in params ? params.CFS : null;
        this.Oracle = 'Oracle' in params ? params.Oracle : null;
        this.ElasticSearch = 'ElasticSearch' in params ? params.ElasticSearch : null;
        this.TBaaS = 'TBaaS' in params ? params.TBaaS : null;
        this.Itop = 'Itop' in params ? params.Itop : null;
        this.DBAudit = 'DBAudit' in params ? params.DBAudit : null;
        this.CynosDBPostgres = 'CynosDBPostgres' in params ? params.CynosDBPostgres : null;
        this.Redis = 'Redis' in params ? params.Redis : null;
        this.MongoDB = 'MongoDB' in params ? params.MongoDB : null;
        this.DCDB = 'DCDB' in params ? params.DCDB : null;
        this.CynosDBMySQL = 'CynosDBMySQL' in params ? params.CynosDBMySQL : null;
        this.Subnet = 'Subnet' in params ? params.Subnet : null;
        this.RouteTable = 'RouteTable' in params ? params.RouteTable : null;

    }
}

/**
 * DescribeSubnetResourceDashboard request structure.
 * @class
 */
class DescribeSubnetResourceDashboardRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet instance ID, such as `subnet-f1xjkw1b`.
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;

    }
}

/**
 * CreateRoutePolicyEntries request structure.
 * @class
 */
class CreateRoutePolicyEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the instance ID of the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Route reception policy entry list.
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }

    }
}

/**
 * DeleteServiceTemplateGroup response structure.
 * @class
 */
class DeleteServiceTemplateGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateAddress request structure.
 * @class
 */
class DisassociateAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the EIP, such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * Whether a common public IP is assigned after the EIP is unbound. Value range:<br><li>TRUE: Indicates that after the EIP is unbound, a common public IP is assigned.<br><li>FALSE: Indicates that after the EIP is unbound, a common public IP is not assigned.<br>Default value: FALSE.<br><br>The parameter can be specified only under the following conditions:<br><li>It can only be specified when you unbind an EIP from the primary private IP of the primary ENI.<br><li>After an EIP is unbound, you can assign public IPs to an account up to 10 times per day. For more information, use the [DescribeAddressQuota] (https://intl.cloud.tencent.com/document/api/213/1378?from_cn_redirect=1) API.
         * @type {boolean || null}
         */
        this.ReallocateNormalPublicIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.ReallocateNormalPublicIp = 'ReallocateNormalPublicIp' in params ? params.ReallocateNormalPublicIp : null;

    }
}

/**
 * Network ACL rule set
 * @class
 */
class NetworkAclEntrySet extends  AbstractModel {
    constructor(){
        super();

        /**
         * Inbound rules.
         * @type {Array.<NetworkAclEntry> || null}
         */
        this.Ingress = null;

        /**
         * Outbound rules.
         * @type {Array.<NetworkAclEntry> || null}
         */
        this.Egress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ingress) {
            this.Ingress = new Array();
            for (let z in params.Ingress) {
                let obj = new NetworkAclEntry();
                obj.deserialize(params.Ingress[z]);
                this.Ingress.push(obj);
            }
        }

        if (params.Egress) {
            this.Egress = new Array();
            for (let z in params.Egress) {
                let obj = new NetworkAclEntry();
                obj.deserialize(params.Egress[z]);
                this.Egress.push(obj);
            }
        }

    }
}

/**
 * DeleteVpnConnection response structure.
 * @class
 */
class DeleteVpnConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReleaseIPv6Addresses response structure.
 * @class
 */
class ReleaseIPv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBandwidthPackageResources request structure.
 * @class
 */
class DescribeBandwidthPackageResourcesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the bandwidth package in the form of `bwp-11112222`.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * Each request can have up to 10 `Filters` and 5 `Filter.Values`. The specific filter conditions are as follows:
<li>resource-id - String - Required: no - (Filter condition) Filters by the unique ID of resources in a bandwidth package, such as `eip-11112222`.</li>
<li>resource-type - String - Required: no - (Filter condition) Filters by the type of resources in a bandwidth package. It now supports only EIP (`Address`) and load balancer (`LoadBalance`).</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The offset. Default value: 0. For more information on `Offset`, see the relevant sections in API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant sections in API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * EnableCcnRoutes request structure.
 * @class
 */
class EnableCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The unique ID of the CCN routing policy, such as `ccnr-f49l6u0z`.
         * @type {Array.<string> || null}
         */
        this.RouteIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;

    }
}

/**
 * Tag key-value pair
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * CreateFlowLog response structure.
 * @class
 */
class CreateFlowLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The information of the flow log created.
         * @type {Array.<FlowLog> || null}
         */
        this.FlowLog = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.FlowLog) {
            this.FlowLog = new Array();
            for (let z in params.FlowLog) {
                let obj = new FlowLog();
                obj.deserialize(params.FlowLog[z]);
                this.FlowLog.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Default VPC and subnet
 * @class
 */
class DefaultVpcSubnet extends  AbstractModel {
    constructor(){
        super();

        /**
         * Default VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Default subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Default VPC name
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * Default subnet name
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * Default subnet IP range
         * @type {string || null}
         */
        this.CidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;

    }
}

/**
 * CreateSubnets response structure.
 * @class
 */
class CreateSubnetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of newly created subnets.
         * @type {Array.<Subnet> || null}
         */
        this.SubnetSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SubnetSet) {
            this.SubnetSet = new Array();
            for (let z in params.SubnetSet) {
                let obj = new Subnet();
                obj.deserialize(params.SubnetSet[z]);
                this.SubnetSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGatewayFlowMonitorDetail request structure.
 * @class
 */
class DescribeGatewayFlowMonitorDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The point in time. This indicates details of this minute will be queried. For example, in `2019-02-28 18:15:20`, details at `18:15` will be queried.
         * @type {string || null}
         */
        this.TimePoint = null;

        /**
         * The instance ID of the VPN gateway, such as `vpn-ltjahce6`.
         * @type {string || null}
         */
        this.VpnId = null;

        /**
         * The instance ID of the Direct Connect gateway, such as `dcg-ltjahce6`.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The instance ID of the peering connection, such as `pcx-ltjahce6`.
         * @type {string || null}
         */
        this.PeeringConnectionId = null;

        /**
         * The instance ID of the NAT gateway, such as `nat-ltjahce6`.
         * @type {string || null}
         */
        this.NatId = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * The order field supports `InPkg`, `OutPkg`, `InTraffic`, and `OutTraffic`.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Order methods. Ascending: `ASC`, Descending: `DESC`.
         * @type {string || null}
         */
        this.OrderDirection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimePoint = 'TimePoint' in params ? params.TimePoint : null;
        this.VpnId = 'VpnId' in params ? params.VpnId : null;
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.PeeringConnectionId = 'PeeringConnectionId' in params ? params.PeeringConnectionId : null;
        this.NatId = 'NatId' in params ? params.NatId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;

    }
}

/**
 * Filter key-value pair
 * @class
 */
class FilterObject extends  AbstractModel {
    constructor(){
        super();

        /**
         * The attribute name. If more than one Filter exists, the logical relation between these Filters is `AND`.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * The attribute value. If there are multiple Values for one Filter, the logical relation between these Values under the same Filter is `OR`.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * ModifyBandwidthPackageAttribute response structure.
 * @class
 */
class ModifyBandwidthPackageAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachNetworkInterface response structure.
 * @class
 */
class DetachNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateIPv6Address request structure.
 * @class
 */
class DisassociateIPv6AddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Indicates the unique ID of the EIPv6, such as eipv6-11112222.
         * @type {string || null}
         */
        this.IPv6AddressId = null;

        /**
         * Indicates whether to keep the ENI bound when unbinding.
         * @type {boolean || null}
         */
        this.KeepBindWithEni = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressId = 'IPv6AddressId' in params ? params.IPv6AddressId : null;
        this.KeepBindWithEni = 'KeepBindWithEni' in params ? params.KeepBindWithEni : null;

    }
}

/**
 * ResetRoutes response structure.
 * @class
 */
class ResetRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetworkAcl request structure.
 * @class
 */
class DeleteNetworkAclRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;

    }
}

/**
 * The port forwarding rules of the NAT gateway
 * @class
 */
class NatGatewayDestinationIpPortTranslationNatRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network protocol. Available choices: `TCP`, `UDP`.
         * @type {string || null}
         */
        this.IpProtocol = null;

        /**
         * EIP.
         * @type {string || null}
         */
        this.PublicIpAddress = null;

        /**
         * Public port.
         * @type {number || null}
         */
        this.PublicPort = null;

        /**
         * Private IP.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Private port.
         * @type {number || null}
         */
        this.PrivatePort = null;

        /**
         * NAT gateway forwarding rule description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * NAT gateway ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * VPC ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The creation time of the NAT gateway forwarding rule.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IpProtocol = 'IpProtocol' in params ? params.IpProtocol : null;
        this.PublicIpAddress = 'PublicIpAddress' in params ? params.PublicIpAddress : null;
        this.PublicPort = 'PublicPort' in params ? params.PublicPort : null;
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.PrivatePort = 'PrivatePort' in params ? params.PrivatePort : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * CloneSecurityGroup response structure.
 * @class
 */
class CloneSecurityGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group object
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {SecurityGroup || null}
         */
        this.SecurityGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroup) {
            let obj = new SecurityGroup();
            obj.deserialize(params.SecurityGroup)
            this.SecurityGroup = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpnConnection response structure.
 * @class
 */
class CreateVpnConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tunnel instance object.
         * @type {VpnConnection || null}
         */
        this.VpnConnection = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VpnConnection) {
            let obj = new VpnConnection();
            obj.deserialize(params.VpnConnection)
            this.VpnConnection = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * IP address template
 * @class
 */
class AddressTemplateSpecification extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the IP address, such as `ipm-2uw6ujo6`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The ID of the IP address group, such as `ipmg-2uw6ujo6`.
         * @type {string || null}
         */
        this.AddressGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.AddressGroupId = 'AddressGroupId' in params ? params.AddressGroupId : null;

    }
}

/**
 * VPC private IPv6 object.
 * @class
 */
class VpcIpv6Address extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` private `IPv6` address
         * @type {string || null}
         */
        this.Ipv6Address = null;

        /**
         * The `IPv6` `CIDR` belonging to the subnet.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * `IPv6` type.
         * @type {string || null}
         */
        this.Ipv6AddressType = null;

        /**
         * `IPv6` application time.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ipv6Address = 'Ipv6Address' in params ? params.Ipv6Address : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Ipv6AddressType = 'Ipv6AddressType' in params ? params.Ipv6AddressType : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * AssignIpv6Addresses request structure.
 * @class
 */
class AssignIpv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * A list of `IPv6` addresses. You can specify a maximum of 10 at one time. The quota is calculated together with that of `Ipv6AddressCount`, a required input parameter alternative to this one.
         * @type {Array.<Ipv6Address> || null}
         */
        this.Ipv6Addresses = null;

        /**
         * The number of automatically assigned `IPv6` addresses. The total number of private IP addresses cannot exceed the quota. The quota is calculated together with that of `Ipv6Addresses`, a required input parameter alternative to this one.
         * @type {number || null}
         */
        this.Ipv6AddressCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.Ipv6Addresses) {
            this.Ipv6Addresses = new Array();
            for (let z in params.Ipv6Addresses) {
                let obj = new Ipv6Address();
                obj.deserialize(params.Ipv6Addresses[z]);
                this.Ipv6Addresses.push(obj);
            }
        }
        this.Ipv6AddressCount = 'Ipv6AddressCount' in params ? params.Ipv6AddressCount : null;

    }
}

/**
 * CreateServiceTemplateGroup response structure.
 * @class
 */
class CreateServiceTemplateGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group object of the protocol port template.
         * @type {ServiceTemplateGroup || null}
         */
        this.ServiceTemplateGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ServiceTemplateGroup) {
            let obj = new ServiceTemplateGroup();
            obj.deserialize(params.ServiceTemplateGroup)
            this.ServiceTemplateGroup = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The network detection object.
 * @class
 */
class NetDetect extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a VPC instance, such as `vpc-12345678`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The name of a VPC instance.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * The ID of a subnet instance, such as subnet-12345678.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The name of a subnet instance.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * The ID of a network detection instance, such as netd-12345678.
         * @type {string || null}
         */
        this.NetDetectId = null;

        /**
         * The name of a network detection instance. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetDetectName = null;

        /**
         * The array of detection destination IPv4 addresses, which contains at most two IP addresses.
         * @type {Array.<string> || null}
         */
        this.DetectDestinationIp = null;

        /**
         * The array of detection source IPv4 addresses automatically allocated by the system. The length is 2.
         * @type {Array.<string> || null}
         */
        this.DetectSourceIp = null;

        /**
         * Type of the next hop. Currently supported types are:
VPN: VPN gateway;
`DIRECTCONNECT`: Direct connect gateway;
`PEERCONNECTION`: Peering connection;
`NAT`: NAT gateway;
`NORMAL_CVM`: CVM instance;
`CCN`: CCN instance;
`NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopType = null;

        /**
         * ID of the next-hop gateway.
If NextHopType is set to VPN, the value of this parameter is the VPN gateway ID, such as vpngw-12345678.
`NextHopType` = `DIRECTCONNECT`: Direct connect gateway ID, such as `dcg-12345678`.
`NextHopType` = `PEERCONNECTION`: Peering connection ID, such as `pcx-12345678`.
`NextHopType` = `NAT`: NAT gateway ID, such as `nat-12345678`.
If NextHopType is set to NORMAL_CVM, the value of this parameter is the IPv4 address of the CVM, such as 10.0.0.12.
`NextHopType` = `CCN`: CCN instance ID, such as `ccn-12345678`.
`NextHopType` = `NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopDestination = null;

        /**
         * The name of the next-hop gateway.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NextHopName = null;

        /**
         * Network detection description.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NetDetectDescription = null;

        /**
         * The creation time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.NetDetectId = 'NetDetectId' in params ? params.NetDetectId : null;
        this.NetDetectName = 'NetDetectName' in params ? params.NetDetectName : null;
        this.DetectDestinationIp = 'DetectDestinationIp' in params ? params.DetectDestinationIp : null;
        this.DetectSourceIp = 'DetectSourceIp' in params ? params.DetectSourceIp : null;
        this.NextHopType = 'NextHopType' in params ? params.NextHopType : null;
        this.NextHopDestination = 'NextHopDestination' in params ? params.NextHopDestination : null;
        this.NextHopName = 'NextHopName' in params ? params.NextHopName : null;
        this.NetDetectDescription = 'NetDetectDescription' in params ? params.NetDetectDescription : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * Modify route status of the VPN gateway
 * @class
 */
class VpnGatewayRouteModify extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route ID of the VPN gateway
         * @type {string || null}
         */
        this.RouteId = null;

        /**
         * Route status of the VPN gateway. Valid values: `ENABLE`, and `DISABLE`.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DisableSnapshotPolicies request structure.
 * @class
 */
class DisableSnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {Array.<string> || null}
         */
        this.SnapshotPolicyIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyIds = 'SnapshotPolicyIds' in params ? params.SnapshotPolicyIds : null;

    }
}

/**
 * Parameter template information.
 * @class
 */
class MemberInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter template.
         * @type {string || null}
         */
        this.Member = null;

        /**
         * Parameter template description.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Member = 'Member' in params ? params.Member : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * ResumeSnapshotInstance request structure.
 * @class
 */
class ResumeSnapshotInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Snapshot file ID
         * @type {string || null}
         */
        this.SnapshotFileId = null;

        /**
         * ID of the instance.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.SnapshotFileId = 'SnapshotFileId' in params ? params.SnapshotFileId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ReplaceSecurityGroupPolicy request structure.
 * @class
 */
class ReplaceSecurityGroupPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Security group policy set object.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

        /**
         * (Optional) The old policy set of the security group, which is used for log records.
         * @type {SecurityGroupPolicySet || null}
         */
        this.OriginalSecurityGroupPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }

        if (params.OriginalSecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.OriginalSecurityGroupPolicySet)
            this.OriginalSecurityGroupPolicySet = obj;
        }

    }
}

/**
 * ModifyVpcEndPointServiceAttribute response structure.
 * @class
 */
class ModifyVpcEndPointServiceAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeReserveIpAddresses response structure.
 * @class
 */
class DescribeReserveIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information returned from the reserved private IP address.
         * @type {Array.<ReserveIpAddressInfo> || null}
         */
        this.ReserveIpAddressSet = null;

        /**
         * Number of reserved private IP addresses returned.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ReserveIpAddressSet) {
            this.ReserveIpAddressSet = new Array();
            for (let z in params.ReserveIpAddressSet) {
                let obj = new ReserveIpAddressInfo();
                obj.deserialize(params.ReserveIpAddressSet[z]);
                this.ReserveIpAddressSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSnapshotFiles response structure.
 * @class
 */
class DescribeSnapshotFilesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot files
         * @type {Array.<SnapshotFileInfo> || null}
         */
        this.SnapshotFileSet = null;

        /**
         * The number of eligible objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SnapshotFileSet) {
            this.SnapshotFileSet = new Array();
            for (let z in params.SnapshotFileSet) {
                let obj = new SnapshotFileInfo();
                obj.deserialize(params.SnapshotFileSet[z]);
                this.SnapshotFileSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCcnAttachedInstances response structure.
 * @class
 */
class DescribeCcnAttachedInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The list of associated instances.
         * @type {Array.<CcnAttachedInstance> || null}
         */
        this.InstanceSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstanceSet) {
            this.InstanceSet = new Array();
            for (let z in params.InstanceSet) {
                let obj = new CcnAttachedInstance();
                obj.deserialize(params.InstanceSet[z]);
                this.InstanceSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * HaVipAssociateAddressIp response structure.
 * @class
 */
class HaVipAssociateAddressIpResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCustomerGateway response structure.
 * @class
 */
class DeleteCustomerGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpnGatewayRoutes response structure.
 * @class
 */
class CreateVpnGatewayRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Destination routes of a VPN gateway
         * @type {Array.<VpnGatewayRoute> || null}
         */
        this.Routes = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpnGatewayRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNetDetect request structure.
 * @class
 */
class CreateNetDetectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a VPC instance, such as `vpc-12345678`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The ID of a subnet instance, such as subnet-12345678.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The name of a network detection instance. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetDetectName = null;

        /**
         * The array of detection destination IPv4 addresses, which contains at most two IP addresses.
         * @type {Array.<string> || null}
         */
        this.DetectDestinationIp = null;

        /**
         * Type of the next hop. Valid values:
`VPN`: VPN gateway;
`DIRECTCONNECT`: Direct connect gateway;
`PEERCONNECTION`: Peering connection;
`NAT`: NAT gateway;
`NORMAL_CVM`: CVM instance;
`CCN`: CCN instance;
`NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopType = null;

        /**
         * ID of the next-hop gateway.
If NextHopType is set to VPN, the value of this parameter is the VPN gateway ID, such as vpngw-12345678.
`NextHopType` = `DIRECTCONNECT`: Direct connect gateway ID, such as `dcg-12345678`.
`NextHopType` = `PEERCONNECTION`: Peering connection ID, such as `pcx-12345678`.
`NextHopType` = `NAT`: NAT gateway ID, such as `nat-12345678`.
If NextHopType is set to NORMAL_CVM, the value of this parameter is the IPv4 address of the CVM, such as 10.0.0.12.
`NextHopType` = `CCN`: CCN instance ID, such as `ccn-12345678`.
`NextHopType` = `NONEXTHOP`: No next hop.
         * @type {string || null}
         */
        this.NextHopDestination = null;

        /**
         * Network detection description.
         * @type {string || null}
         */
        this.NetDetectDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.NetDetectName = 'NetDetectName' in params ? params.NetDetectName : null;
        this.DetectDestinationIp = 'DetectDestinationIp' in params ? params.DetectDestinationIp : null;
        this.NextHopType = 'NextHopType' in params ? params.NextHopType : null;
        this.NextHopDestination = 'NextHopDestination' in params ? params.NextHopDestination : null;
        this.NetDetectDescription = 'NetDetectDescription' in params ? params.NetDetectDescription : null;

    }
}

/**
 * CreateAddressTemplate response structure.
 * @class
 */
class CreateAddressTemplateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The template object of the IP address.
         * @type {AddressTemplate || null}
         */
        this.AddressTemplate = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddressTemplate) {
            let obj = new AddressTemplate();
            obj.deserialize(params.AddressTemplate)
            this.AddressTemplate = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNatGatewayDestinationIpPortTranslationNatRule response structure.
 * @class
 */
class CreateNatGatewayDestinationIpPortTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAddressTemplateGroup request structure.
 * @class
 */
class DeleteAddressTemplateGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The IP address template group instance ID, such as `ipmg-90cex8mq`.
         * @type {string || null}
         */
        this.AddressTemplateGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateGroupId = 'AddressTemplateGroupId' in params ? params.AddressTemplateGroupId : null;

    }
}

/**
 * DescribeNetworkInterfaceLimit request structure.
 * @class
 */
class DescribeNetworkInterfaceLimitRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of a CVM instance or ENI to query
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * CreateBandwidthPackage request structure.
 * @class
 */
class CreateBandwidthPackageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The network type of the bandwidth package. Default value: `BGP`. Valid values:
`BGP`
`HIGH_QUALITY_BGP`
         * @type {string || null}
         */
        this.NetworkType = null;

        /**
         * The billing mode of the bandwidth package. Default value: `ENHANCED95_POSTPAID_BY_MONTH`. Valid values:
<li>`ENHANCED95_POSTPAID_BY_MONTH`: Pay-as-you-go - Enhanced 95th percentile</li>
<li>`PRIMARY_TRAFFIC_POSTPAID_BY_HOUR`: Postpaid - Main Traffic Billing</li>
<li>`BANDWIDTH_POSTPAID_BY_DAY`: General BGP, Pay-as-you-go - Bandwidth-based</li>
<li>`PEAK_BANDWIDTH_POSTPAID_BY_DAY`: Static single-line, Pay-as-you-go - Daily billed</li>
<li>`TOP5_POSTPAID_BY_MONTH`: Pay-as-you-go - Monthly top 5th, If you need to use this Bglling mode, please submit a ticket.</li>


         * @type {string || null}
         */
        this.ChargeType = null;

        /**
         * The name of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageName = null;

        /**
         * The number of bandwidth packages to create. Valid range: 1-20. It can only be "1" for bill-by-CVM accounts.
         * @type {number || null}
         */
        this.BandwidthPackageCount = null;

        /**
         * The limit of the bandwidth package in Mbps. The value '-1' indicates there is no limit. This feature is currently in beta.
         * @type {number || null}
         */
        this.InternetMaxBandwidth = null;

        /**
         * The list of tags to be bound.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * The protocol type of the bandwidth package. Valid values: 'ipv4' and 'ipv6'. Default value: 'ipv4'.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * 
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         *     Network egress. It defaults to `center_egress1`. Valid values:
center_egress1,center_egress2,center_egress3

         * @type {string || null}
         */
        this.Egress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkType = 'NetworkType' in params ? params.NetworkType : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.BandwidthPackageName = 'BandwidthPackageName' in params ? params.BandwidthPackageName : null;
        this.BandwidthPackageCount = 'BandwidthPackageCount' in params ? params.BandwidthPackageCount : null;
        this.InternetMaxBandwidth = 'InternetMaxBandwidth' in params ? params.InternetMaxBandwidth : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.Egress = 'Egress' in params ? params.Egress : null;

    }
}

/**
 * DescribeIp6Addresses response structure.
 * @class
 */
class DescribeIp6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of IPv6 meeting conditions.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * IPv6 detailed information list.
         * @type {Array.<Address> || null}
         */
        this.AddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AddressSet) {
            this.AddressSet = new Array();
            for (let z in params.AddressSet) {
                let obj = new Address();
                obj.deserialize(params.AddressSet[z]);
                this.AddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRouteTableAttribute request structure.
 * @class
 */
class ModifyRouteTableAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Route table name.
         * @type {string || null}
         */
        this.RouteTableName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteTableName = 'RouteTableName' in params ? params.RouteTableName : null;

    }
}

/**
 * ModifyDirectConnectGatewayAttribute response structure.
 * @class
 */
class ModifyDirectConnectGatewayAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpnGateways request structure.
 * @class
 */
class DescribeVpnGatewaysRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPN gateway instance ID, such as `vpngw-f49l6u0z`. Each request can have a maximum of 100 instances. `VpnGatewayIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.VpnGatewayIds = null;

        /**
         * Filter condition. `VpnGatewayIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - (Filter condition) VPC instance ID, such as `vpc-f49l6u0z`.</li>
<li>vpn-gateway-id - String - (Filter condition) VPN instance ID, such as `vpngw-5aluhh9t`.</li>
<li>vpn-gateway-name - String - (Filter condition) VPN instance name.</li>
<li>type - String - (Filter condition) VPN gateway type: 'IPSEC', 'SSL'.</li>
<li>public-ip-address- String - (Filter condition) Public IP.</li>
<li>renew-flag - String - (Filter condition) Gateway renewal type. Manual renewal: `NOTIFY_AND_MANUAL_RENEW`, Automatic renewal: `NOTIFY_AND_AUTO_RENEW`.</li>
<li>zone - String - (Filter condition) The availability zone where the VPN is located, such as `ap-guangzhou-2`.</li>
         * @type {Array.<FilterObject> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of request objects.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayIds = 'VpnGatewayIds' in params ? params.VpnGatewayIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FilterObject();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeInstanceJumbo request structure.
 * @class
 */
class DescribeInstanceJumboRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID list of CVM. limits up to 10 instances for each query.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * The verification result of the network detection destination IP address.
 * @class
 */
class NetDetectIpState extends  AbstractModel {
    constructor(){
        super();

        /**
         * The destination IPv4 address of network detection.
         * @type {string || null}
         */
        this.DetectDestinationIp = null;

        /**
         * The detection result.
0: successful;
-1: no packet loss occurred during routing;
-2: packet loss occurred when outbound traffic is blocked by the ACL;
-3: packet loss occurred when inbound traffic is blocked by the ACL;
-4: other errors.
         * @type {number || null}
         */
        this.State = null;

        /**
         * The latency. Unit: ms.
         * @type {number || null}
         */
        this.Delay = null;

        /**
         * The packet loss rate.
         * @type {number || null}
         */
        this.PacketLossRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DetectDestinationIp = 'DetectDestinationIp' in params ? params.DetectDestinationIp : null;
        this.State = 'State' in params ? params.State : null;
        this.Delay = 'Delay' in params ? params.Delay : null;
        this.PacketLossRate = 'PacketLossRate' in params ? params.PacketLossRate : null;

    }
}

/**
 * Public Network Inquiry Output Parameters
 * @class
 */
class InternetPrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Detailed parameters of Public IP inquiry.
         * @type {InternetPriceDetail || null}
         */
        this.AddressPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddressPrice) {
            let obj = new InternetPriceDetail();
            obj.deserialize(params.AddressPrice)
            this.AddressPrice = obj;
        }

    }
}

/**
 * ModifyIp6AddressesBandwidth response structure.
 * @class
 */
class ModifyIp6AddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSubnets request structure.
 * @class
 */
class CreateSubnetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC` instance, such as `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The subnet object list.
         * @type {Array.<SubnetInput> || null}
         */
        this.Subnets = null;

        /**
         * Bound tags. Note that the collection of tags here is shared by all subnet objects in the list. You cannot specify tags for each subnet. Example: [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * ID of the CDC instance to which the subnets will be created
         * @type {string || null}
         */
        this.CdcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

        if (params.Subnets) {
            this.Subnets = new Array();
            for (let z in params.Subnets) {
                let obj = new SubnetInput();
                obj.deserialize(params.Subnets[z]);
                this.Subnets.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;

    }
}

/**
 * DescribeVpcEndPointService request structure.
 * @class
 */
class DescribeVpcEndPointServiceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filters. `EndPointServiceIds` and `Filters` cannot be both passed in. 
<li>`service-id` - String - Unique endpoint service ID. </li>
<li>`service-name` - String - Endpoint service instance name. </li>
<li>`service-instance-id` - String - Unique backend service ID in the format of `lb-xxx`. </li>
<li>`service-type` - String - Backend PaaS service type. It can be `CLB`, `CDB` or `CRS`. It defaults to `CLB` if not specified. </li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of results per page; default value: 20; maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Endpoint service ID `EndPointServiceIds` and `Filters` cannot be both passed in. 
         * @type {Array.<string> || null}
         */
        this.EndPointServiceIds = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.IsListAuthorizedEndPointService = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.EndPointServiceIds = 'EndPointServiceIds' in params ? params.EndPointServiceIds : null;
        this.IsListAuthorizedEndPointService = 'IsListAuthorizedEndPointService' in params ? params.IsListAuthorizedEndPointService : null;

    }
}

/**
 * DisableSnapshotPolicies response structure.
 * @class
 */
class DisableSnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssociateAddress response structure.
 * @class
 */
class AssociateAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCcnAttachedInstancesAttribute response structure.
 * @class
 */
class ModifyCcnAttachedInstancesAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnassignIpv6SubnetCidrBlock request structure.
 * @class
 */
class UnassignIpv6SubnetCidrBlockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the VPC where the subnet is located, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The `IPv6` subnet IP range list.
         * @type {Array.<Ipv6SubnetCidrBlock> || null}
         */
        this.Ipv6SubnetCidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

        if (params.Ipv6SubnetCidrBlocks) {
            this.Ipv6SubnetCidrBlocks = new Array();
            for (let z in params.Ipv6SubnetCidrBlocks) {
                let obj = new Ipv6SubnetCidrBlock();
                obj.deserialize(params.Ipv6SubnetCidrBlocks[z]);
                this.Ipv6SubnetCidrBlocks.push(obj);
            }
        }

    }
}

/**
 * CreateNetworkAcl request structure.
 * @class
 */
class CreateNetworkAclRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID, which can be obtained from the `VpcId` field in the response of the [`DescribeVpcs`](https://intl.cloud.tencent.com/document/product/215/15778?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Network ACL name, which can contain up to 60 bytes.
         * @type {string || null}
         */
        this.NetworkAclName = null;

        /**
         * Network ACL type. Valid values: `TRIPLE` and `QUINTUPLE`.
         * @type {string || null}
         */
        this.NetworkAclType = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NetworkAclName = 'NetworkAclName' in params ? params.NetworkAclName : null;
        this.NetworkAclType = 'NetworkAclType' in params ? params.NetworkAclType : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DescribeAddresses request structure.
 * @class
 */
class DescribeAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of unique IDs of EIPs in the format of `eip-11112222`. `AddressIds` and `Filters.address-id` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

        /**
         * Each request can have up to 10 `Filters` and 100 `Filter.Values`. Detailed filter conditions:
<li> address-id - String - Optional - Filter by unique EIP ID, such as `eip-11112222`.</li>
<li> address-name - String - Optional - Filter by EIP name. Fuzzy filtering is not supported.</li>
<li> address-ip - String - Optional - Filter by EIP address.</li>
<li> address-status - String - Optional - Filter by EIP status. Valid values: `CREATING`, `BINDING`, `BIND`, `UNBINDING`, `UNBIND`, `OFFLINING`, and `BIND_ENI`.</li>
<li> instance-id - String - Optional - Filter by the ID of the instance bound to the EIP, such as `ins-11112222`.</li>
<li> private-ip-address - String - Optional - Filter by the private IP address bound to the EIP.</li>
<li> network-interface-id - String - Optional - Filter by ID of the ENI bound to the EIP, such as `eni-11112222`.</li>
<li> is-arrears - String - Optional - Filter by the fact whether the EIP is overdue (TRUE: the EIP is overdue | FALSE: the billing status of the EIP is normal).</li>
<li> address-type - String - Optional - Filter by IP type. Valid values: `WanIP`, `EIP`, `AnycastEIP`, and `HighQualityEIP`. Default value: `EIP`.</li>
<li> address-isp - String - Optional - Filter by ISP type. Valid values: `BGP`, `CMCC`, `CUCC`, and `CTCC`.</li>
<li> dedicated-cluster-id - String - Optional - Filter by unique CDC ID, such as `cluster-11112222`.</li>
<li> tag-key - String - Optional - Filter by tag key.</li>
<li> tag-value - String - Optional - Filter by tag value.</li>
<li> tag:tag-key - String - Optional - Filter by tag key-value pair. Use a specific tag key to replace `tag-key`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The Offset. The default value is 0. For more information on Offset, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on Limit, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeSecurityGroupPolicies request structure.
 * @class
 */
class DescribeSecurityGroupPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. It can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Filters
<li>`security-group-id` - String - Security group ID in the rule.</li>
<li>`ip` - String - IP. IPV4 and IPV6 fuzzy matching is supported.</li>
<li>`address-module` - String - IP address or address group template ID.</li>
<li>`service-module` - String - Protocol port or port group template ID.</li>
<li>`protocol-type` - String - Protocol supported by the security group policy. Valid values: `TCP`, `UDP`, `ICMP`, `ICMPV6`, `GRE`, `ALL`.</li>
<li>`port` - String - Optional - Port. Fuzzy matching is supported. Query all ports when the protocol value is `ALL`.</li>
<li>`poly` - String - Policy type. Valid values: `ALL`, `ACCEPT` and `DROP`.</li>
<li>`direction` - String - Direction of the rule. Valid values: `ALL`, `INBOUND` and `OUTBOUND`.</li>
<li>`description` - String - Policy description. Fuzzy matching is supported.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * ModifyNetworkInterfaceAttribute response structure.
 * @class
 */
class ModifyNetworkInterfaceAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InquiryPriceRenewAddresses request structure.
 * @class
 */
class InquiryPriceRenewAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Indicates the renewal resource instance ID.
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

        /**
         * A required billing parameter for an EIP billed by "BANDWIDTH_PREPAID_BY_MONTH". When the EIP is billed by "BANDWIDTH_PREPAID_BY_MONTH", this parameter is required. For other scenarios, it can be ignored.
         * @type {AddressChargePrepaid || null}
         */
        this.AddressChargePrepaid = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;

        if (params.AddressChargePrepaid) {
            let obj = new AddressChargePrepaid();
            obj.deserialize(params.AddressChargePrepaid)
            this.AddressChargePrepaid = obj;
        }

    }
}

/**
 * CreateSecurityGroup response structure.
 * @class
 */
class CreateSecurityGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group object.
         * @type {SecurityGroup || null}
         */
        this.SecurityGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroup) {
            let obj = new SecurityGroup();
            obj.deserialize(params.SecurityGroup)
            this.SecurityGroup = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateNetworkInterfaceSecurityGroups response structure.
 * @class
 */
class DisassociateNetworkInterfaceSecurityGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyGatewayFlowQos request structure.
 * @class
 */
class ModifyGatewayFlowQosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Gateway instance ID. Supported types:
Direct connect gateway instance, such as `dcg-ltjahce6`;
NAT gateway instance, such as `nat-ltjahce6`;
VPN gateway instance, such as `vpn-ltjahce6`.
         * @type {string || null}
         */
        this.GatewayId = null;

        /**
         * Bandwidth limit value in Mbps. Valid values: >0: Set the limit to the specified value. 0: Block all traffic. -1: No bandwidth limit.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * CVM private IP addresses with limited bandwidth.
         * @type {Array.<string> || null}
         */
        this.IpAddresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.IpAddresses = 'IpAddresses' in params ? params.IpAddresses : null;

    }
}

/**
 * DescribeNetworkInterfaceLimit response structure.
 * @class
 */
class DescribeNetworkInterfaceLimitResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Quota of ENIs mounted to a CVM instance in a standard way
         * @type {number || null}
         */
        this.EniQuantity = null;

        /**
         * Quota of IP addresses that can be allocated to each standard-mounted ENI
         * @type {number || null}
         */
        this.EniPrivateIpAddressQuantity = null;

        /**
         * Quota of ENIs mounted to a CVM instance as an extension
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExtendEniQuantity = null;

        /**
         * Quota of IP addresses that can be allocated to each extension-mounted ENI.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExtendEniPrivateIpAddressQuantity = null;

        /**
         * The quota of relayed ENIs
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SubEniQuantity = null;

        /**
         * The quota of IPs that can be assigned to each relayed ENI.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SubEniPrivateIpAddressQuantity = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EniQuantity = 'EniQuantity' in params ? params.EniQuantity : null;
        this.EniPrivateIpAddressQuantity = 'EniPrivateIpAddressQuantity' in params ? params.EniPrivateIpAddressQuantity : null;
        this.ExtendEniQuantity = 'ExtendEniQuantity' in params ? params.ExtendEniQuantity : null;
        this.ExtendEniPrivateIpAddressQuantity = 'ExtendEniPrivateIpAddressQuantity' in params ? params.ExtendEniPrivateIpAddressQuantity : null;
        this.SubEniQuantity = 'SubEniQuantity' in params ? params.SubEniQuantity : null;
        this.SubEniPrivateIpAddressQuantity = 'SubEniPrivateIpAddressQuantity' in params ? params.SubEniPrivateIpAddressQuantity : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssignIpv6CidrBlock response structure.
 * @class
 */
class AssignIpv6CidrBlockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The assigned `IPv6` IP range, such as `3402:4e00:20:1000::/56`
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateCcn request structure.
 * @class
 */
class CreateCcnRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the CCN. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.CcnName = null;

        /**
         * The description of the CCN. The maximum length is 100 characters.
         * @type {string || null}
         */
        this.CcnDescription = null;

        /**
         * CCN service quality, 'PT': Platinum, 'AU': Gold, 'AG': Silver. The default is 'AU'.
         * @type {string || null}
         */
        this.QosLevel = null;

        /**
         * The billing method. POSTPAID: postpaid by traffic. Default: POSTPAID.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * The bandwidth limit type. Valid values: OUTER_REGION_LIMIT: region outbound bandwidth limit; INTER_REGION_LIMIT: inter-region bandwidth limit. Default value: OUTER_REGION_LIMIT. Monthly-subscribed CCN instances only support inter-region bandwidth limit, while pay-as-you-go CCN instances support the both bandwidth limit types.
         * @type {string || null}
         */
        this.BandwidthLimitType = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnName = 'CcnName' in params ? params.CcnName : null;
        this.CcnDescription = 'CcnDescription' in params ? params.CcnDescription : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.BandwidthLimitType = 'BandwidthLimitType' in params ? params.BandwidthLimitType : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DeleteTemplateMember response structure.
 * @class
 */
class DeleteTemplateMemberResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIpGeolocationDatabaseUrl request structure.
 * @class
 */
class DescribeIpGeolocationDatabaseUrlRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol type for an IP location database. Valid value: `ipv4`.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * DescribeVpcEndPoint response structure.
 * @class
 */
class DescribeVpcEndPointResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint
         * @type {Array.<EndPoint> || null}
         */
        this.EndPointSet = null;

        /**
         * Number of matched endpoints
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.EndPointSet) {
            this.EndPointSet = new Array();
            for (let z in params.EndPointSet) {
                let obj = new EndPoint();
                obj.deserialize(params.EndPointSet[z]);
                this.EndPointSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetworkAclQuintupleEntries request structure.
 * @class
 */
class DescribeNetworkAclQuintupleEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Returned quantity. Default: 20. Value range: 1-100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter condition. `HaVipIds` and `Filters` cannot be specified at the same time.
<li>`protocol` - String - Such as `TCP`</li>
<li>`description` - String - Description</li>
<li>`destination-cidr` - String - Destination CIDR block, such as `192.168.0.0/24`</li>
<li>`source-cidr` - String - Source CIDR block, such as `192.168.0.0/24`</li>
<li>`action` - String - ·Values: `ACCEPT`, `DROP`</li>
<li>`network-acl-quintuple-entry-id` - String - Unique ID of the quintuple, such as `acli45-ahnu4rv5`</li>
<li>`network-acl-direction` - String - Direction of the policy. Values: `INGRESS` or `EGRESS`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeSnapshotPolicies response structure.
 * @class
 */
class DescribeSnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policies
         * @type {Array.<SnapshotPolicy> || null}
         */
        this.SnapshotPolicySet = null;

        /**
         * The number of eligible objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SnapshotPolicySet) {
            this.SnapshotPolicySet = new Array();
            for (let z in params.SnapshotPolicySet) {
                let obj = new SnapshotPolicy();
                obj.deserialize(params.SnapshotPolicySet[z]);
                this.SnapshotPolicySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EnableRoutes response structure.
 * @class
 */
class EnableRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRoutePolicyAttribute response structure.
 * @class
 */
class ModifyRoutePolicyAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteVpnConnection request structure.
 * @class
 */
class DeleteVpnConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The ID of the VPN tunnel instance, such as `vpnx-f49l6u0z`.
         * @type {string || null}
         */
        this.VpnConnectionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.VpnConnectionId = 'VpnConnectionId' in params ? params.VpnConnectionId : null;

    }
}

/**
 * Network ACL rules.
 * @class
 */
class NetworkAclEntry extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol. Valid values: TCP, UDP, ICMP, ALL.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Port. Valid values: all, single port, range. When Protocol takes the value `ALL` or `ICMP`, Port cannot be specified.
         * @type {string || null}
         */
        this.Port = null;

        /**
         * IP range or IP address (mutually exclusive).
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * CIDR block or IPv6 address (mutually exclusive).
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

        /**
         * ACCEPT or DROP.
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Rule description, which is up to 100 bytes.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Modification time.
         * @type {string || null}
         */
        this.ModifyTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Port = 'Port' in params ? params.Port : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

    }
}

/**
 * DescribeAssistantCidr request structure.
 * @class
 */
class DescribeAssistantCidrRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a VPC instance set, such as `vpc-6v2ht8q5`.
         * @type {Array.<string> || null}
         */
        this.VpcIds = null;

        /**
         * Filter condition. `VpcIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - (Filter condition) VPC instance ID, such as `vpc-f49l6u0z`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcIds = 'VpcIds' in params ? params.VpcIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * RenewVpnGateway response structure.
 * @class
 */
class RenewVpnGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteDirectConnectGateway response structure.
 * @class
 */
class DeleteDirectConnectGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeIPv6Addresses request structure.
 * @class
 */
class DescribeIPv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID column identifying IPv6.

- Unique ID of the traditional EIPv6, such as `eip-11112222`
- Unique ID of the EIPv6, such as `eipv6-11112222`

Note: `IPv6AddressIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.IPv6AddressIds = null;

        /**
         * Each request can have up to 10 `Filters` and 100 `Filter.Values`. `IPv6AddressIds` and `Filters` cannot be specified at the same time. The detailed filter conditions are as follows:

- address-id - String - Required: No - (Filter condition) Filter by the unique ID of the EIPv6.
- public-ipv6-address - String - Required: No - (Filter condition) Filter by the public IPv6 address.
- network-interface-id - String - Required: No - (Filter condition) Filter by the unique ID of the ENI.
- instance-id - String - Required: No - (Filter condition) Filter by the unique ID of the bound instance.
- charge-type - String - Required: No - (Filter condition) Filter by the billing type.
- private-ipv6-address - String - Required: No - (Filter condition) Filter by the bound private IPv6 address.
- egress - String - Required: No - (Filter condition) Filter by the egress.
- address-type - String - Required: No - (Filter condition) Filter by the IPv6 type. Valid values: 'EIP6', 'EIPv6', 'WanIPv6', and 'HighQualityEIPv6'. Default: 'EIPv6'.
- address-isp - String - Required: No - (Filter condition) Filter by the ISP type. Valid values: 'BGP', 'CMCC', 'CUCC', and 'CTCC'.
- address-status - String - Required: No - (Filter condition) Filter by the EIP status. Valid values: 'CREATING', 'BINDING', 'BIND', 'UNBINDING', 'UNBIND', 'OFFLINING', 'BIND_ENI', and 'PRIVATE'.
- address-name - String - Required: No - (Filter condition) Filter by the EIP name. Fuzzy filtering is not supported.
- tag-key - String - Required: No - (Filter condition) Filter by the tag key.
- tag-value - String - Required: No - (Filter condition) Filter by the tag value.
- tag:tag-key - String - Required: No - (Filter condition) Filter by the tag-key - value pair. Replace tag-key with a specific tag key.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Indicates whether to query the traditional IPv6 address information.
         * @type {boolean || null}
         */
        this.Traditional = null;

        /**
         * Offset. Default: 0. For more information on Offset, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default: 20. Maximum: 100. For more information on Limit, see the relevant section in the API [Introduction](https://www.tencentcloud.com/document/api/213/15688).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressIds = 'IPv6AddressIds' in params ? params.IPv6AddressIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Traditional = 'Traditional' in params ? params.Traditional : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ResetVpnGatewayInternetMaxBandwidth request structure.
 * @class
 */
class ResetVpnGatewayInternetMaxBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The new bandwidth cap in Mbps. Values: `5`, `10`, `20`, `50`, `100`, `200`, `500` and `1000`. The adjustment of the VPN gateway bandwidth is limited to [5,100] Mbps and [200,1000] Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

    }
}

/**
 * Endpoint details
 * @class
 */
class EndPoint extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint ID
         * @type {string || null}
         */
        this.EndPointId = null;

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * APP ID
         * @type {string || null}
         */
        this.EndPointOwner = null;

        /**
         * Endpoint name
         * @type {string || null}
         */
        this.EndPointName = null;

        /**
         * Endpoint service VPC ID
         * @type {string || null}
         */
        this.ServiceVpcId = null;

        /**
         * Endpoint service VIP
         * @type {string || null}
         */
        this.ServiceVip = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * Endpoint VIP
         * @type {string || null}
         */
        this.EndPointVip = null;

        /**
         * Endpoint status. Valid values: `ACTIVE` (available), `PENDING` (to be accepted), `ACCEPTING` (being accepted), `REJECTED` (rejected), and `FAILED` (failed).
         * @type {string || null}
         */
        this.State = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * ID list of security group instances bound with endpoints
         * @type {Array.<string> || null}
         */
        this.GroupSet = null;

        /**
         * Endpoint service name
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.EndPointOwner = 'EndPointOwner' in params ? params.EndPointOwner : null;
        this.EndPointName = 'EndPointName' in params ? params.EndPointName : null;
        this.ServiceVpcId = 'ServiceVpcId' in params ? params.ServiceVpcId : null;
        this.ServiceVip = 'ServiceVip' in params ? params.ServiceVip : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.EndPointVip = 'EndPointVip' in params ? params.EndPointVip : null;
        this.State = 'State' in params ? params.State : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.GroupSet = 'GroupSet' in params ? params.GroupSet : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;

    }
}

/**
 * Direct Connect gateway object.
 * @class
 */
class DirectConnectGateway extends  AbstractModel {
    constructor(){
        super();

        /**
         * Direct Connect `ID`.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * Direct Connect gateway name.
         * @type {string || null}
         */
        this.DirectConnectGatewayName = null;

        /**
         * The `ID` of the `VPC` instance associated with the Direct Connect gateway.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The associated network type:
<li>`VPC` - VPC</li>
<li>`CCN` - CCN</li>
         * @type {string || null}
         */
        this.NetworkType = null;

        /**
         * The `ID` of the associated network instance:
<li>When the NetworkType is `VPC`, this value is the VPC instance `ID`</li>
<li>When the NetworkType is `CCN`, this value is the CCN instance `ID`</li>
         * @type {string || null}
         */
        this.NetworkInstanceId = null;

        /**
         * Gateway type:
<li>NORMAL - Standard type. Note: CCN only supports the standard type</li>
<li>NAT - NAT type</li>
NAT type supports network address switch configuration. After the type is confirmed, it cannot be modified. A VPC can create one NAT-type Direct Connect gateway and one non-NAT-type Direct Connect gateway
         * @type {string || null}
         */
        this.GatewayType = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Direct Connect gateway IP.
         * @type {string || null}
         */
        this.DirectConnectGatewayIp = null;

        /**
         * The `ID` of the `CCN` instance associated with the Direct Connect gateway.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The route-learning type of the CCN:
<li>`BGP` - Automatic learning.</li>
<li>`STATIC` - Static, that is, user-configured.</li>
         * @type {string || null}
         */
        this.CcnRouteType = null;

        /**
         * Whether BGP is enabled.
         * @type {boolean || null}
         */
        this.EnableBGP = null;

        /**
         * Whether to enable BGP's `community` attribute. Valid values: enable, disable
         * @type {boolean || null}
         */
        this.EnableBGPCommunity = null;

        /**
         * ID of the NAT gateway bound.
Note: this field may return `null`, indicating that no valid value was found.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Whether the direct connect gateway supports the VXLAN architecture.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<boolean> || null}
         */
        this.VXLANSupport = null;

        /**
         * CCN route publishing mode. Valid values: `standard` and `exquisite`.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModeType = null;

        /**
         * Whether the direct connect gateway is for an edge zone.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.LocalZone = null;

        /**
         * Availability zone where the direct connect gateway resides.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * The status of gateway traffic monitoring
0: disable
1: enable
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EnableFlowDetails = null;

        /**
         * The last time when the gateway traffic monitoring is enabled/disabled
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowDetailsUpdateTime = null;

        /**
         * Whether gateway traffic monitoring is supported
0: No
1: Yes
Note: this field may return `null`, indicating that no valid values can be found.
         * @type {number || null}
         */
        this.NewAfc = null;

        /**
         * Direct connect gateway access network types:
<li>`VXLAN` - VXLAN type.</li>
<li>`MPLS` - MPLS type.</li>
<li>`Hybrid` - Hybrid type.</li>
Note: this field may return `null`, indicating that no valid values can be found.
         * @type {string || null}
         */
        this.AccessNetworkType = null;

        /**
         * AZ list of direct connect gateway with cross-AZ placement groups
Note: this field may return `null`, indicating that no valid values can be found.
         * @type {Array.<string> || null}
         */
        this.HaZoneList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.DirectConnectGatewayName = 'DirectConnectGatewayName' in params ? params.DirectConnectGatewayName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NetworkType = 'NetworkType' in params ? params.NetworkType : null;
        this.NetworkInstanceId = 'NetworkInstanceId' in params ? params.NetworkInstanceId : null;
        this.GatewayType = 'GatewayType' in params ? params.GatewayType : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.DirectConnectGatewayIp = 'DirectConnectGatewayIp' in params ? params.DirectConnectGatewayIp : null;
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.CcnRouteType = 'CcnRouteType' in params ? params.CcnRouteType : null;
        this.EnableBGP = 'EnableBGP' in params ? params.EnableBGP : null;
        this.EnableBGPCommunity = 'EnableBGPCommunity' in params ? params.EnableBGPCommunity : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.VXLANSupport = 'VXLANSupport' in params ? params.VXLANSupport : null;
        this.ModeType = 'ModeType' in params ? params.ModeType : null;
        this.LocalZone = 'LocalZone' in params ? params.LocalZone : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.EnableFlowDetails = 'EnableFlowDetails' in params ? params.EnableFlowDetails : null;
        this.FlowDetailsUpdateTime = 'FlowDetailsUpdateTime' in params ? params.FlowDetailsUpdateTime : null;
        this.NewAfc = 'NewAfc' in params ? params.NewAfc : null;
        this.AccessNetworkType = 'AccessNetworkType' in params ? params.AccessNetworkType : null;
        this.HaZoneList = 'HaZoneList' in params ? params.HaZoneList : null;

    }
}

/**
 * Price
 * @class
 */
class Price extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance price.
         * @type {ItemPrice || null}
         */
        this.InstancePrice = null;

        /**
         * Bandwidth price
         * @type {ItemPrice || null}
         */
        this.BandwidthPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstancePrice) {
            let obj = new ItemPrice();
            obj.deserialize(params.InstancePrice)
            this.InstancePrice = obj;
        }

        if (params.BandwidthPrice) {
            let obj = new ItemPrice();
            obj.deserialize(params.BandwidthPrice)
            this.BandwidthPrice = obj;
        }

    }
}

/**
 * HaVipDisassociateAddressIp request structure.
 * @class
 */
class HaVipDisassociateAddressIpRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the `HAVIP`, such as `havip-9o233uri`. This must be an `HAVIP` that has been bound to an `EIP`.
         * @type {string || null}
         */
        this.HaVipId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipId = 'HaVipId' in params ? params.HaVipId : null;

    }
}

/**
 * ReturnNormalAddresses response structure.
 * @class
 */
class ReturnNormalAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisableFlowLogs response structure.
 * @class
 */
class DisableFlowLogsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBandwidthPackageResources response structure.
 * @class
 */
class DescribeBandwidthPackageResourcesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of eligible resources in the bandwidth package.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The list of resources in the bandwidth package.
         * @type {Array.<Resource> || null}
         */
        this.ResourceSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ResourceSet) {
            this.ResourceSet = new Array();
            for (let z in params.ResourceSet) {
                let obj = new Resource();
                obj.deserialize(params.ResourceSet[z]);
                this.ResourceSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCrossBorderCompliance response structure.
 * @class
 */
class DescribeCrossBorderComplianceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of compliance review requests.
         * @type {Array.<CrossBorderCompliance> || null}
         */
        this.CrossBorderComplianceSet = null;

        /**
         * Total number of compliance review requests.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CrossBorderComplianceSet) {
            this.CrossBorderComplianceSet = new Array();
            for (let z in params.CrossBorderComplianceSet) {
                let obj = new CrossBorderCompliance();
                obj.deserialize(params.CrossBorderComplianceSet[z]);
                this.CrossBorderComplianceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpnGatewayAttribute response structure.
 * @class
 */
class ModifyVpnGatewayAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AllocateIPv6Addresses request structure.
 * @class
 */
class AllocateIPv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EIPv6 name, which is the custom EIPv6 name given by the user when the user applies for the EIPv6. Default: not named.
         * @type {string || null}
         */
        this.AddressName = null;

        /**
         * Indicates the type of EIPv6. Valid values:

- EIPv6: common IPv6
- HighQualityEIPv6: dedicated IPv6
Note: Contact the product team to enable the dedicated IPv6 allowlist. The dedicated IPv6 is only supported in some regions.

Default: EIPv6.
         * @type {string || null}
         */
        this.AddressType = null;

        /**
         * Number of applied EIPv6 addresses. Default: 1.
         * @type {number || null}
         */
        this.AddressCount = null;

        /**
         * Indicates the billing method of EIPv6. Valid values:

- BANDWIDTH_PACKAGE: billed by [Bandwidth Package](https://intl.cloud.tencent.com/document/product/684/15255?from_cn_redirect=1)
- TRAFFIC_POSTPAID_BY_HOUR: postpaid by traffic on an hourly basis

Default: TRAFFIC_POSTPAID_BY_HOUR.
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * Indicates the type of EIPv6 line. Default: BGP.

For a user who has enabled the static single-line IP allowlist, valid values include:
- CMCC: China Mobile
- CTCC: China Telecom
- CUCC: China Unicom
Note: The static single-line IP is only supported in some regions.
         * @type {string || null}
         */
        this.InternetServiceProvider = null;

        /**
         * EIPv6 bandwidth cap, in Mbps.

Valid values depend on the EIP billing method:

- BANDWIDTH_PACKAGE: 1 Mbps to 2000 Mbps
- TRAFFIC_POSTPAID_BY_HOUR: 1 Mbps to 100 Mbps

Default: 1 Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Unique ID of the bandwidth package.
Setting this parameter and having InternetChargeType as BANDWIDTH_PACKAGE indicate that the created EIP will join this BGP bandwidth package and the billing method of bandwidth package will be adopted.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * List of tags to be associated.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * EIPv6 network egress. Valid values:

- CENTER_EGRESS_1: Central egress point 1
- CENTER_EGRESS_2: Central egress point 2
- CENTER_EGRESS_3: Central egress point 3
Note: The network egress for different Internet Service Providers (ISPs) or resource types requires contacting the product team for enablement.

Default: CENTER_EGRESS_1.
         * @type {string || null}
         */
        this.Egress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressName = 'AddressName' in params ? params.AddressName : null;
        this.AddressType = 'AddressType' in params ? params.AddressType : null;
        this.AddressCount = 'AddressCount' in params ? params.AddressCount : null;
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetServiceProvider = 'InternetServiceProvider' in params ? params.InternetServiceProvider : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Egress = 'Egress' in params ? params.Egress : null;

    }
}

/**
 * AssociateDirectConnectGatewayNatGateway response structure.
 * @class
 */
class AssociateDirectConnectGatewayNatGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Endpoint service
 * @class
 */
class EndPointService extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * APP ID
         * @type {string || null}
         */
        this.ServiceOwner = null;

        /**
         * Endpoint service name
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Real server VIP
         * @type {string || null}
         */
        this.ServiceVip = null;

        /**
         * Real server ID in the format of `lb-xxx`.
         * @type {string || null}
         */
        this.ServiceInstanceId = null;

        /**
         * Whether to automatically accept
         * @type {boolean || null}
         */
        this.AutoAcceptFlag = null;

        /**
         * Number of associated endpoints
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EndPointCount = null;

        /**
         * Array of endpoints
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<EndPoint> || null}
         */
        this.EndPointSet = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Mounted PaaS service type. Values: `CLB`, `CDB`, `CRS`
         * @type {string || null}
         */
        this.ServiceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.ServiceOwner = 'ServiceOwner' in params ? params.ServiceOwner : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.ServiceVip = 'ServiceVip' in params ? params.ServiceVip : null;
        this.ServiceInstanceId = 'ServiceInstanceId' in params ? params.ServiceInstanceId : null;
        this.AutoAcceptFlag = 'AutoAcceptFlag' in params ? params.AutoAcceptFlag : null;
        this.EndPointCount = 'EndPointCount' in params ? params.EndPointCount : null;

        if (params.EndPointSet) {
            this.EndPointSet = new Array();
            for (let z in params.EndPointSet) {
                let obj = new EndPoint();
                obj.deserialize(params.EndPointSet[z]);
                this.EndPointSet.push(obj);
            }
        }
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;

    }
}

/**
 * ResetRoutePolicyAssociations response structure.
 * @class
 */
class ResetRoutePolicyAssociationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpnGatewayCcnRoutes request structure.
 * @class
 */
class DescribeVpnGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the VPN gateway
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DisassociateDirectConnectGatewayNatGateway response structure.
 * @class
 */
class DisassociateDirectConnectGatewayNatGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateServiceTemplateGroup request structure.
 * @class
 */
class CreateServiceTemplateGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group name of the protocol port template.
         * @type {string || null}
         */
        this.ServiceTemplateGroupName = null;

        /**
         * Instance ID of the protocol port template, such as `ppm-4dw6agho`.
         * @type {Array.<string> || null}
         */
        this.ServiceTemplateIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateGroupName = 'ServiceTemplateGroupName' in params ? params.ServiceTemplateGroupName : null;
        this.ServiceTemplateIds = 'ServiceTemplateIds' in params ? params.ServiceTemplateIds : null;

    }
}

/**
 * CreateNetworkAclQuintupleEntries request structure.
 * @class
 */
class CreateNetworkAclQuintupleEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Network ACL quintuple rule set.
         * @type {NetworkAclQuintupleEntries || null}
         */
        this.NetworkAclQuintupleSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;

        if (params.NetworkAclQuintupleSet) {
            let obj = new NetworkAclQuintupleEntries();
            obj.deserialize(params.NetworkAclQuintupleSet)
            this.NetworkAclQuintupleSet = obj;
        }

    }
}

/**
 * DescribeDirectConnectGatewayCcnRoutes request structure.
 * @class
 */
class DescribeDirectConnectGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the Direct Connect gateway, such as `dcg-prpqlmg1`.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The route learning type of the CCN. Available values:
<li>`BGP` - Automatic learning.</li>
<li>`STATIC` - Static means user-configured. This is the default value.</li>
         * @type {string || null}
         */
        this.CcnRouteType = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.CcnRouteType = 'CcnRouteType' in params ? params.CcnRouteType : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeClassicLinkInstances response structure.
 * @class
 */
class DescribeClassicLinkInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Classiclink instance.
         * @type {Array.<ClassicLinkInstance> || null}
         */
        this.ClassicLinkInstanceSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ClassicLinkInstanceSet) {
            this.ClassicLinkInstanceSet = new Array();
            for (let z in params.ClassicLinkInstanceSet) {
                let obj = new ClassicLinkInstance();
                obj.deserialize(params.ClassicLinkInstanceSet[z]);
                this.ClassicLinkInstanceSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteReserveIpAddresses request structure.
 * @class
 */
class DeleteReserveIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the VPC.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * List of reserved private IP addresses.
         * @type {Array.<string> || null}
         */
        this.ReserveIpIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.ReserveIpIds = 'ReserveIpIds' in params ? params.ReserveIpIds : null;

    }
}

/**
 * DescribeVpnGatewayCcnRoutes response structure.
 * @class
 */
class DescribeVpnGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN route (IDC IP range) list.
         * @type {Array.<VpngwCcnRoutes> || null}
         */
        this.RouteSet = null;

        /**
         * Number of objects that meet the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RouteSet) {
            this.RouteSet = new Array();
            for (let z in params.RouteSet) {
                let obj = new VpngwCcnRoutes();
                obj.deserialize(params.RouteSet[z]);
                this.RouteSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachCcnInstances request structure.
 * @class
 */
class DetachCcnInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The list of network instances to be unbound
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * ModifyVpcEndPointServiceWhiteList request structure.
 * @class
 */
class ModifyVpcEndPointServiceWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User UIN
         * @type {string || null}
         */
        this.UserUin = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * Allowlist description
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserUin = 'UserUin' in params ? params.UserUin : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * MigrateNetworkInterface response structure.
 * @class
 */
class MigrateNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSnapshotAttachedInstances request structure.
 * @class
 */
class DescribeSnapshotAttachedInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Filters
Values:
<li>`instance-id`: Instance ID</li>
<li>`instance-region`: Instance region</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: `0`.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 200.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateNatGatewaySourceIpTranslationNatRule response structure.
 * @class
 */
class CreateNatGatewaySourceIpTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNatGatewaySourceIpTranslationNatRule response structure.
 * @class
 */
class DeleteNatGatewaySourceIpTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The instance object associated with a CCN
 * @class
 */
class CcnAttachedInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of a CCN instance.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The type of associated instances:
<li>`VPC`: VPC</li>
<li>`DIRECTCONNECT`: Direct Connect</li>
<li>`BMVPC`: BM VPC</li>
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * The ID of the associated instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The name of the associated instance.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * The region to which the associated instance belongs, such as `ap-guangzhou`.
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * The UIN (root account) to which the associated instance belongs.
         * @type {string || null}
         */
        this.InstanceUin = null;

        /**
         * The CIDR of the associated instance.
         * @type {Array.<string> || null}
         */
        this.CidrBlock = null;

        /**
         * The status of the associated instance:
<li>`PENDING`: In application</li>
<li>`ACTIVE`: Connected</li>
<li>`EXPIRED`: Expired</li>
<li>`REJECTED`: Rejected</li>
<li>`DELETED`: Deleted</li>
<li>`FAILED`: Failed (it will be asynchronously unbound after 2 hours)</li>
<li>`ATTACHING`: binding</li>
<li>`DETACHING`: Unbinding</li>
<li>`DETACHFAILED`: The unbinding failed (it will be asynchronously unbound after 2 hours)</li>
         * @type {string || null}
         */
        this.State = null;

        /**
         * Association Time.
         * @type {string || null}
         */
        this.AttachedTime = null;

        /**
         * The UIN (root account) to which the CCN belongs.
         * @type {string || null}
         */
        this.CcnUin = null;

        /**
         * General location of the associated instance, such as CHINA_MAINLAND.
         * @type {string || null}
         */
        this.InstanceArea = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Route table ID
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Route table name
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RouteTableName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.InstanceUin = 'InstanceUin' in params ? params.InstanceUin : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.State = 'State' in params ? params.State : null;
        this.AttachedTime = 'AttachedTime' in params ? params.AttachedTime : null;
        this.CcnUin = 'CcnUin' in params ? params.CcnUin : null;
        this.InstanceArea = 'InstanceArea' in params ? params.InstanceArea : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteTableName = 'RouteTableName' in params ? params.RouteTableName : null;

    }
}

/**
 * SecurityPolicyDatabase policy
 * @class
 */
class SecurityPolicyDatabase extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local IP range
         * @type {string || null}
         */
        this.LocalCidrBlock = null;

        /**
         * Opposite IP range
         * @type {Array.<string> || null}
         */
        this.RemoteCidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocalCidrBlock = 'LocalCidrBlock' in params ? params.LocalCidrBlock : null;
        this.RemoteCidrBlock = 'RemoteCidrBlock' in params ? params.RemoteCidrBlock : null;

    }
}

/**
 * InquiryPriceModifyAddressesBandwidth request structure.
 * @class
 */
class InquiryPriceModifyAddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of EIP
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

        /**
         * New Bandwidth Value
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

    }
}

/**
 * CreateVpcEndPointService request structure.
 * @class
 */
class CreateVpcEndPointServiceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Endpoint service name
         * @type {string || null}
         */
        this.EndPointServiceName = null;

        /**
         * Whether to automatically accept
         * @type {boolean || null}
         */
        this.AutoAcceptFlag = null;

        /**
         * Real server ID, such as `lb-xxx`.
         * @type {string || null}
         */
        this.ServiceInstanceId = null;

        /**
         * (Disused) Whether it’s a PaaS service
         * @type {boolean || null}
         */
        this.IsPassService = null;

        /**
         * Mounted PaaS service type. Values: `CLB` (default), `CDB`, `CRS`
         * @type {string || null}
         */
        this.ServiceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.EndPointServiceName = 'EndPointServiceName' in params ? params.EndPointServiceName : null;
        this.AutoAcceptFlag = 'AutoAcceptFlag' in params ? params.AutoAcceptFlag : null;
        this.ServiceInstanceId = 'ServiceInstanceId' in params ? params.ServiceInstanceId : null;
        this.IsPassService = 'IsPassService' in params ? params.IsPassService : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;

    }
}

/**
 * `IPv6` address information.
 * @class
 */
class Ipv6Address extends  AbstractModel {
    constructor(){
        super();

        /**
         * `IPv6` address, such as `3402:4e00:20:100:0:8cd9:2a67:71f3`
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Whether it is a primary `IP`.
         * @type {boolean || null}
         */
        this.Primary = null;

        /**
         * The `ID` of the `EIP` instance, such as `eip-hxlqja90`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * Message description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Whether the public IP is blocked.
         * @type {boolean || null}
         */
        this.IsWanIpBlocked = null;

        /**
         * `IPv6` address status:
<li>`PENDING`: Creating</li>
<li>`MIGRATING`: Migrating</li>
<li>`DELETING`: Deleting</li>
<li>`AVAILABLE`: Available</li>
         * @type {string || null}
         */
        this.State = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Address = 'Address' in params ? params.Address : null;
        this.Primary = 'Primary' in params ? params.Primary : null;
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.IsWanIpBlocked = 'IsWanIpBlocked' in params ? params.IsWanIpBlocked : null;
        this.State = 'State' in params ? params.State : null;

    }
}

/**
 * CreateNetworkInterface request structure.
 * @class
 */
class CreateNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance. You can obtain the parameter value from the VpcId field in the returned result of DescribeVpcs API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The name of the ENI. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetworkInterfaceName = null;

        /**
         * The subnet instance ID of the ENI, such as `subnet-0ap8nwca`.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * ENI description can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetworkInterfaceDescription = null;

        /**
         * The number of private IP addresses you apply for. The total number of private IP addresses cannot exceed the quota.
         * @type {number || null}
         */
        this.SecondaryPrivateIpAddressCount = null;

        /**
         * IP service level. It is used together with `SecondaryPrivateIpAddressCount`. Values: `PT` (Gold), `AU` (Silver), `AG` (Bronze) and `DEFAULT` (Default).
         * @type {string || null}
         */
        this.QosLevel = null;

        /**
         * Specifies the security group to be bound with, such as ['sg-1dd51d'].
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * The information of the specified private IPs. You can specify a maximum of 10 each time.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddresses = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Configuration of the ENI trunking mode. Valid values: `Enable` and `Disable`. Default value: `Disable`.
         * @type {string || null}
         */
        this.TrunkingFlag = null;

        /**
         * 
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NetworkInterfaceName = 'NetworkInterfaceName' in params ? params.NetworkInterfaceName : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.NetworkInterfaceDescription = 'NetworkInterfaceDescription' in params ? params.NetworkInterfaceDescription : null;
        this.SecondaryPrivateIpAddressCount = 'SecondaryPrivateIpAddressCount' in params ? params.SecondaryPrivateIpAddressCount : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.PrivateIpAddresses) {
            this.PrivateIpAddresses = new Array();
            for (let z in params.PrivateIpAddresses) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddresses[z]);
                this.PrivateIpAddresses.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.TrunkingFlag = 'TrunkingFlag' in params ? params.TrunkingFlag : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * Current billable usage of a pay-as-you-go bandwidth package
 * @class
 */
class BandwidthPackageBillBandwidth extends  AbstractModel {
    constructor(){
        super();

        /**
         * Current billable usage, in Mbps
         * @type {number || null}
         */
        this.BandwidthUsage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthUsage = 'BandwidthUsage' in params ? params.BandwidthUsage : null;

    }
}

/**
 * DeleteHaVip response structure.
 * @class
 */
class DeleteHaVipResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeFlowLogs response structure.
 * @class
 */
class DescribeFlowLogsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The instance set of flow logs.
         * @type {Array.<FlowLog> || null}
         */
        this.FlowLog = null;

        /**
         * The total number of flow logs.
         * @type {number || null}
         */
        this.TotalNum = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.FlowLog) {
            this.FlowLog = new Array();
            for (let z in params.FlowLog) {
                let obj = new FlowLog();
                obj.deserialize(params.FlowLog[z]);
                this.FlowLog.push(obj);
            }
        }
        this.TotalNum = 'TotalNum' in params ? params.TotalNum : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPC private IP object.
 * @class
 */
class VpcPrivateIpAddress extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` private `IP`.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * The `CIDR` belonging to the subnet.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Private `IP` type.
         * @type {string || null}
         */
        this.PrivateIpAddressType = null;

        /**
         * `IP` application time.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.PrivateIpAddressType = 'PrivateIpAddressType' in params ? params.PrivateIpAddressType : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * A CVM instance.
 * @class
 */
class CvmInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * CVM instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * CVM Name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * CVM status.
         * @type {string || null}
         */
        this.InstanceState = null;

        /**
         * Number of CPU cores in an instance (in core).
         * @type {number || null}
         */
        this.CPU = null;

        /**
         * Instance’s memory capacity. Unit: GB.
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * The creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Instance type.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance ENI quota (including primary ENIs).
         * @type {number || null}
         */
        this.EniLimit = null;

        /**
         * Private IP quoata for instance ENIs (including primary ENIs).
         * @type {number || null}
         */
        this.EniIpLimit = null;

        /**
         * The number of ENIs (including primary ENIs) bound to a instance.
         * @type {number || null}
         */
        this.InstanceEniCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceState = 'InstanceState' in params ? params.InstanceState : null;
        this.CPU = 'CPU' in params ? params.CPU : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.EniLimit = 'EniLimit' in params ? params.EniLimit : null;
        this.EniIpLimit = 'EniIpLimit' in params ? params.EniIpLimit : null;
        this.InstanceEniCount = 'InstanceEniCount' in params ? params.InstanceEniCount : null;

    }
}

/**
 * DescribeNetworkAcls request structure.
 * @class
 */
class DescribeNetworkAclsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of network ACL instance IDs, such as [acl-12345678]. Up to 100 instances are allowed for each request. This parameter does not support specifying `NetworkAclIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.NetworkAclIds = null;

        /**
         * Filter condition. `NetworkAclIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - (Filter condition) VPC instance ID, such as vpc-12345678.</li>
<li>network-acl-id - String - (Filter condition) Network ACL instance ID, such as acl-12345678.</li>
<li>network-acl-name - String - (Filter condition) Network ACL instance name.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Returned quantity. Default: 20. Value range: 1-100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclIds = 'NetworkAclIds' in params ? params.NetworkAclIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeNetworkAclQuintupleEntries response structure.
 * @class
 */
class DescribeNetworkAclQuintupleEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of the network ACL quintuple entries
         * @type {Array.<NetworkAclQuintupleEntry> || null}
         */
        this.NetworkAclQuintupleSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkAclQuintupleSet) {
            this.NetworkAclQuintupleSet = new Array();
            for (let z in params.NetworkAclQuintupleSet) {
                let obj = new NetworkAclQuintupleEntry();
                obj.deserialize(params.NetworkAclQuintupleSet[z]);
                this.NetworkAclQuintupleSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSubnets request structure.
 * @class
 */
class DescribeSubnetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries the ID of the subnet instance, such as `subnet-pxir56ns`. Each request can have a maximum of 100 instances. `SubnetIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

        /**
         * Filter condition. `SubnetIds` and `Filters` cannot be specified at the same time.
<li>subnet-id - String - (Filter condition) Subnet instance name.</li>
<li>vpc-id - String - (Filter condition) VPC instance ID, such as `vpc-f49l6u0z`.</li>
<li>cidr-block - String - (Filter condition) Subnet IP range, such as `192.168.1.0`.</li>
<li>is-default - Boolean - (Filter condition) Whether it is the default subnet.</li>
<li>is-remote-vpc-snat - Boolean - (Filter condition) Whether it is a VPC SNAT address pool subnet.</li>
<li>subnet-name - String - (Filter condition) Subnet name.</li>
<li>zone - String - (Filter condition) Availability zone.</li>
<li> tag-key - String - Required: No - (Filter condition) Filter by tag key.</li>
<li>tag:tag-key - String - Required: No - (Filter condition) Filter by tag key-value pair. Use a specific tag key to replace `tag-key`. For its usage, see example 2.</li>
<li>cdc-id - String - Required: No - (Filter condition) Filter by CDC ID to obtain subnets in the specified CDC.</li>
<li>is-cdc-subnet - String - Required: No - (Filter condition) Whether it is a CDC subnet. Valid values: `0` (no); `1` (yes).</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateSubnet request structure.
 * @class
 */
class CreateSubnetRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance to be operated on. You can obtain the parameter value from the VpcId field in the returned result of DescribeVpcs API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The subnet name. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * The subnet IP address range. It must be within the VPC IP address range. Subnet IP address ranges cannot overlap with each other within the same VPC.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * The ID of the availability zone in which the subnet resides. You can set up disaster recovery across availability zones by choosing different availability zones for different subnets.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;

    }
}

/**
 * IP address template group
 * @class
 */
class AddressTemplateGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address template group name.
         * @type {string || null}
         */
        this.AddressTemplateGroupName = null;

        /**
         * IP address template group instance ID, such as `ipmg-dih8xdbq`.
         * @type {string || null}
         */
        this.AddressTemplateGroupId = null;

        /**
         * IP address template ID.
         * @type {Array.<string> || null}
         */
        this.AddressTemplateIdSet = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * IP address template instance
         * @type {Array.<AddressTemplateItem> || null}
         */
        this.AddressTemplateSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateGroupName = 'AddressTemplateGroupName' in params ? params.AddressTemplateGroupName : null;
        this.AddressTemplateGroupId = 'AddressTemplateGroupId' in params ? params.AddressTemplateGroupId : null;
        this.AddressTemplateIdSet = 'AddressTemplateIdSet' in params ? params.AddressTemplateIdSet : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.AddressTemplateSet) {
            this.AddressTemplateSet = new Array();
            for (let z in params.AddressTemplateSet) {
                let obj = new AddressTemplateItem();
                obj.deserialize(params.AddressTemplateSet[z]);
                this.AddressTemplateSet.push(obj);
            }
        }

    }
}

/**
 * DownloadCustomerGatewayConfiguration request structure.
 * @class
 */
class DownloadCustomerGatewayConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The ID of the VPN tunnel instance, such as `vpnx-f49l6u0z`.
         * @type {string || null}
         */
        this.VpnConnectionId = null;

        /**
         * Customer gateway vendor information object, which can be obtained through DescribeCustomerGatewayVendors.
         * @type {CustomerGatewayVendor || null}
         */
        this.CustomerGatewayVendor = null;

        /**
         * Name of the physical API for tunnel access device.
         * @type {string || null}
         */
        this.InterfaceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.VpnConnectionId = 'VpnConnectionId' in params ? params.VpnConnectionId : null;

        if (params.CustomerGatewayVendor) {
            let obj = new CustomerGatewayVendor();
            obj.deserialize(params.CustomerGatewayVendor)
            this.CustomerGatewayVendor = obj;
        }
        this.InterfaceName = 'InterfaceName' in params ? params.InterfaceName : null;

    }
}

/**
 * DeleteBandwidthPackage request structure.
 * @class
 */
class DeleteBandwidthPackageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the bandwidth package to be deleted.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

    }
}

/**
 * HAVIP description information
 * @class
 */
class HaVip extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `HAVIP`. This is the unique identifier of the `HAVIP`.
         * @type {string || null}
         */
        this.HaVipId = null;

        /**
         * The name of the `HAVIP`.
         * @type {string || null}
         */
        this.HaVipName = null;

        /**
         * The virtual IP address.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * The `ID` of the VPC to which the `HAVIP` belongs.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The `ID` of the subnet to which the `HAVIP` belongs.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The `ID` of the ENI associated with the `HAVIP`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The `ID` of the bound instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Bound `EIP`.
         * @type {string || null}
         */
        this.AddressIp = null;

        /**
         * Status:
<li>`AVAILABLE`: Operating</li>
<li>`UNBIND`: Not bound</li>
         * @type {string || null}
         */
        this.State = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Identifier for businesses that use HAVIP.
         * @type {string || null}
         */
        this.Business = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipId = 'HaVipId' in params ? params.HaVipId : null;
        this.HaVipName = 'HaVipName' in params ? params.HaVipName : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.AddressIp = 'AddressIp' in params ? params.AddressIp : null;
        this.State = 'State' in params ? params.State : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.Business = 'Business' in params ? params.Business : null;

    }
}

/**
 * ModifyAddressesBandwidth response structure.
 * @class
 */
class ModifyAddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Local gateway information
 * @class
 */
class LocalGateway extends  AbstractModel {
    constructor(){
        super();

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Local gateway instance ID
         * @type {string || null}
         */
        this.UniqLocalGwId = null;

        /**
         * Local gateway name
         * @type {string || null}
         */
        this.LocalGatewayName = null;

        /**
         * Local gateway IP
         * @type {string || null}
         */
        this.LocalGwIp = null;

        /**
         * Creation time of the local gateway
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UniqLocalGwId = 'UniqLocalGwId' in params ? params.UniqLocalGwId : null;
        this.LocalGatewayName = 'LocalGatewayName' in params ? params.LocalGatewayName : null;
        this.LocalGwIp = 'LocalGwIp' in params ? params.LocalGwIp : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * RejectAttachCcnInstances response structure.
 * @class
 */
class RejectAttachCcnInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetCcnRegionBandwidthLimits response structure.
 * @class
 */
class SetCcnRegionBandwidthLimitsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySnapshotPolicies response structure.
 * @class
 */
class ModifySnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResetRoutePolicyEntries request structure.
 * @class
 */
class ResetRoutePolicyEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the instance ID of the route reception policy, such as rrp-azd4dt1c.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Route reception policy entry list. requires specifying the routing strategy entry ID (RoutePolicyEntryId).
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

        /**
         * Describes the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyDescription = null;

        /**
         * Specifies the route reception policy name.
         * @type {string || null}
         */
        this.RoutePolicyName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }
        this.RoutePolicyDescription = 'RoutePolicyDescription' in params ? params.RoutePolicyDescription : null;
        this.RoutePolicyName = 'RoutePolicyName' in params ? params.RoutePolicyName : null;

    }
}

/**
 * InquiryPriceRenewAddresses response structure.
 * @class
 */
class InquiryPriceRenewAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Elastic Public IP renewal price.
         * @type {InternetPrice || null}
         */
        this.Price = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Price) {
            let obj = new InternetPrice();
            obj.deserialize(params.Price)
            this.Price = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRoutePolicyAssociations response structure.
 * @class
 */
class DeleteRoutePolicyAssociationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRoutePolicyAssociations request structure.
 * @class
 */
class CreateRoutePolicyAssociationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route reception policy binding object list.
         * @type {Array.<RoutePolicyAssociation> || null}
         */
        this.RoutePolicyAssociationSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RoutePolicyAssociationSet) {
            this.RoutePolicyAssociationSet = new Array();
            for (let z in params.RoutePolicyAssociationSet) {
                let obj = new RoutePolicyAssociation();
                obj.deserialize(params.RoutePolicyAssociationSet[z]);
                this.RoutePolicyAssociationSet.push(obj);
            }
        }

    }
}

/**
 * Route reception policy. when CCN or other services add routes to a VPC custom route table, you can drop or enable appropriate route entries.
 * @class
 */
class RoutePolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the routing policy.

Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Specifies the routing strategy name.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RoutePolicyName = null;

        /**
         * Routing policy description.

Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RoutePolicyDescription = null;

        /**
         * Routing policy rule list.
Note: This field may return null, indicating that no valid value was found.
         * @type {Array.<RoutePolicyEntry> || null}
         */
        this.RoutePolicyEntrySet = null;

        /**
         * Specifies the routing strategy binding.
Note: This field may return null, indicating that no valid value was found.
         * @type {Array.<RoutePolicyAssociation> || null}
         */
        this.RoutePolicyAssociationSet = null;

        /**
         * Creation time.

Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Tag key-value pair.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;
        this.RoutePolicyName = 'RoutePolicyName' in params ? params.RoutePolicyName : null;
        this.RoutePolicyDescription = 'RoutePolicyDescription' in params ? params.RoutePolicyDescription : null;

        if (params.RoutePolicyEntrySet) {
            this.RoutePolicyEntrySet = new Array();
            for (let z in params.RoutePolicyEntrySet) {
                let obj = new RoutePolicyEntry();
                obj.deserialize(params.RoutePolicyEntrySet[z]);
                this.RoutePolicyEntrySet.push(obj);
            }
        }

        if (params.RoutePolicyAssociationSet) {
            this.RoutePolicyAssociationSet = new Array();
            for (let z in params.RoutePolicyAssociationSet) {
                let obj = new RoutePolicyAssociation();
                obj.deserialize(params.RoutePolicyAssociationSet[z]);
                this.RoutePolicyAssociationSet.push(obj);
            }
        }
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

    }
}

/**
 * DescribeCcnRoutes request structure.
 * @class
 */
class DescribeCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-gree226l`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The unique ID of the CCN routing policy, such as `ccnr-f49l6u0z`.
         * @type {Array.<string> || null}
         */
        this.RouteIds = null;

        /**
         * Filter condition. `RouteIds` and `Filters` cannot be specified at the same time.
<li>route-id - String - (Filter condition) Routing policy ID.</li>
<li>cidr-block - String - (Filter condition) Destination.</li>
<li>instance-type - String - (Filter condition) The next hop type.</li>
<li>instance-region - String - (Filter condition) The next hop region.</li>
<li>instance-id - String - (Filter condition) The instance ID of the next hop.</li>
<li>route-table-id - String - (Filter condition) The list of route table IDs in the format of `ccntr-1234edfr`. Filters by the route table ID.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * GenerateVpnConnectionDefaultHealthCheckIp response structure.
 * @class
 */
class GenerateVpnConnectionDefaultHealthCheckIpResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local IP used for VPN tunnel health check
         * @type {string || null}
         */
        this.HealthCheckLocalIp = null;

        /**
         * Remote IP used for VPN tunnel health check
         * @type {string || null}
         */
        this.HealthCheckRemoteIp = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HealthCheckLocalIp = 'HealthCheckLocalIp' in params ? params.HealthCheckLocalIp : null;
        this.HealthCheckRemoteIp = 'HealthCheckRemoteIp' in params ? params.HealthCheckRemoteIp : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateAndAttachNetworkInterface request structure.
 * @class
 */
class CreateAndAttachNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance. You can obtain the parameter value from the `VpcId` field in the returned result of the `DescribeVpcs` API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The name of the ENI. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.NetworkInterfaceName = null;

        /**
         * The subnet instance ID of the ENI, such as 'subnet-0ap8nwca'.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * CVM instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The information of the specified private IPs. You can specify a maximum of 10 IPs each time.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddresses = null;

        /**
         * The number of private IP addresses you apply for. The total number of private IP addresses cannot exceed the quota.
         * @type {number || null}
         */
        this.SecondaryPrivateIpAddressCount = null;

        /**
         * IP service level. It is used together with `SecondaryPrivateIpAddressCount`. Values: `PT` (Gold), `AU` (Silver), `AG` (Bronze) and `DEFAULT` (Default).
         * @type {string || null}
         */
        this.QosLevel = null;

        /**
         * The security group to be bound with, such as ['sg-1dd51d'].
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * The ENI description. You can enter any information within 60 characters.
         * @type {string || null}
         */
        this.NetworkInterfaceDescription = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * ENI mounting type. Valid values: `0` (standard); `1` (extension); default value: `0`
         * @type {number || null}
         */
        this.AttachType = null;

        /**
         * 
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NetworkInterfaceName = 'NetworkInterfaceName' in params ? params.NetworkInterfaceName : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.PrivateIpAddresses) {
            this.PrivateIpAddresses = new Array();
            for (let z in params.PrivateIpAddresses) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddresses[z]);
                this.PrivateIpAddresses.push(obj);
            }
        }
        this.SecondaryPrivateIpAddressCount = 'SecondaryPrivateIpAddressCount' in params ? params.SecondaryPrivateIpAddressCount : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;
        this.NetworkInterfaceDescription = 'NetworkInterfaceDescription' in params ? params.NetworkInterfaceDescription : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AttachType = 'AttachType' in params ? params.AttachType : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * DeleteVpcEndPoint response structure.
 * @class
 */
class DeleteVpcEndPointResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetDetect response structure.
 * @class
 */
class DeleteNetDetectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AllocateAddresses request structure.
 * @class
 */
class AllocateAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of EIPs. Default: 1.
         * @type {number || null}
         */
        this.AddressCount = null;

        /**
         * The EIP line type. Default: BGP.
<ul style="margin:0"><li>For a user who has activated the static single-line IP allowlist, possible values are:<ul><li>CMCC: China Mobile</li>
<li>CTCC: China Telecom</li>
<li>CUCC: China Unicom</li></ul>Note: Only certain regions support static single-line IP addresses.</li></ul>
         * @type {string || null}
         */
        this.InternetServiceProvider = null;

        /**
         * The EIP billing method.
<ul style="margin:0"><li>For bill-by-IP account beta users, valid values: <ul><li>BANDWIDTH_PACKAGE: paid by the [bandwidth package](https://intl.cloud.tencent.com/document/product/684/15255?from_cn_redirect=1)(who must also be bandwidth package beta users)</li>
<li>BANDWIDTH_POSTPAID_BY_HOUR: billed by hourly bandwidth on a pay-as-you-go basis</li>
<li>BANDWIDTH_PREPAID_BY_MONTH: monthly bandwidth subscription</li>
<li>TRAFFIC_POSTPAID_BY_HOUR: billed by hourly traffic on a pay-as-you-go basis</li></ul>Default value: TRAFFIC_POSTPAID_BY_HOUR</li>
<li>If you are not a bill-by-IP account beta user, the EIP billing is the same as that for the instance bound to the EIP. Therefore, you do not need to pass in this parameter.</li></ul>
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * The EIP outbound bandwidth cap, in Mbps.
<ul style="margin:0"><li>For bill-by-IP account beta users, the bandwidth cap range is determined by the EIP billing mode. <ul><li>`BANDWIDTH_PACKAGE`: 1 Mbps to 2000 Mbps</li>
<li>`BANDWIDTH_POSTPAID_BY_HOUR`: 1 Mbps to 100 Mbps</li>
<li>`BANDWIDTH_PREPAID_BY_MONTH`: 1 Mbps to 200 Mbps</li>
<li>`TRAFFIC_POSTPAID_BY_HOUR`: 1 Mbps to 100 Mbps</li></ul>Default value: 1 Mbps </li>
<li>If you are not a bill-by-IP account beta user, the EIP outbound bandwidth cap is subject to the bandwidth cap of the instance bound to the EIP. Therefore, you do not need to pass in this parameter. </li></ul>
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * A required billing parameter for an EIP billed by monthly bandwidth subscription. For EIPs using other billing modes, it can be ignored.
         * @type {AddressChargePrepaid || null}
         */
        this.AddressChargePrepaid = null;

        /**
         * EIP type. Default value: EIP.
<ul style="margin:0"><li>For beta users of AIA, the value can be:</li></ul>`AnycastEIP`: an AIA IP address. For more information, see [Anycast Internet Acceleration](https://intl.cloud.tencent.com/document/product/644?from_cn_redirect=1).</li></ul>Note: Anycast EIPs are supported only in partial regions. </li></ul>
<ul style="margin:0"><li>For beta users of dedicated IP, the value can be: <ul><li>`HighQualityEIP`: Dedicated IP</li></ul>Note that dedicated IPs are only available in partial regions. </li></ul>
</ul>
<ul style="margin:0"><li>For beta users of Anti-DDoS IP, the value can be: <ul><li>`AntiDDoSEIP`: Anti-DDoS EIP</li></ul>Note that Anti-DDoS IPs are only available in partial regions. </li></ul>
         * @type {string || null}
         */
        this.AddressType = null;

        /**
         * Anycast publishing region
<ul style="margin:0"><li>Valid for users who have activated AIA. Values:<ul><li>ANYCAST_ZONE_GLOBAL: global publishing region </li><li>ANYCAST_ZONE_OVERSEAS: overseas publishing region</li><li><b>**[Disused]**</b> ANYCAST_ZONE_A: publishing region A (updated to ANYCAST_ZONE_GLOBAL)</li><li><b>**[Disused]**</b> ANYCAST_ZONE_B: publishing region B (updated to ANYCAST_ZONE_GLOBAL)</li></ul>Default: ANYCAST_ZONE_OVERSEAS.</li></ul>
         * @type {string || null}
         */
        this.AnycastZone = null;

        /**
         * 
         * @type {Array.<string> || null}
         */
        this.VipCluster = null;

        /**
         * <b>**[Disused]**</b>
Whether the Anycast EIP can be bound to CLB instances.
<ul style="margin:0"><li>Valid for users who have activated the AIA. Values:<ul><li>TRUE: the Anycast EIP can be bound to CLB instances.</li>
<li>FALSE: the Anycast EIP can be bound to CVMs, NAT gateways, and HAVIPs.</li></ul>Default: FALSE.</li></ul>
         * @type {boolean || null}
         */
        this.ApplicableForCLB = null;

        /**
         * List of tags to be bound.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * The unique ID of a BGP bandwidth package. If you configure this parameter and set InternetChargeType as BANDWIDTH_PACKAGE, the new EIP is added to this package and billed by the bandwidth package mode.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * EIP name, which is the custom EIP name given by the user when applying for the EIP. Default: not named
         * @type {string || null}
         */
        this.AddressName = null;

        /**
         * 
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.IsDedicatedAddressPool = null;

        /**
         * Network egress. It defaults to `center_egress1`.
         * @type {string || null}
         */
        this.Egress = null;

        /**
         * Anti-DDoS service package ID. This is required when you want to request an Anti-DDoS IP.
         * @type {string || null}
         */
        this.AntiDDoSPackageId = null;

        /**
         * A string used to ensure the idempotency of the request. Generate a value based on your client. This can ensure that the value is unique for different requests. It only supports ASCII characters and can contain up to 64 characters. 
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressCount = 'AddressCount' in params ? params.AddressCount : null;
        this.InternetServiceProvider = 'InternetServiceProvider' in params ? params.InternetServiceProvider : null;
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

        if (params.AddressChargePrepaid) {
            let obj = new AddressChargePrepaid();
            obj.deserialize(params.AddressChargePrepaid)
            this.AddressChargePrepaid = obj;
        }
        this.AddressType = 'AddressType' in params ? params.AddressType : null;
        this.AnycastZone = 'AnycastZone' in params ? params.AnycastZone : null;
        this.VipCluster = 'VipCluster' in params ? params.VipCluster : null;
        this.ApplicableForCLB = 'ApplicableForCLB' in params ? params.ApplicableForCLB : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.AddressName = 'AddressName' in params ? params.AddressName : null;
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;
        this.IsDedicatedAddressPool = 'IsDedicatedAddressPool' in params ? params.IsDedicatedAddressPool : null;
        this.Egress = 'Egress' in params ? params.Egress : null;
        this.AntiDDoSPackageId = 'AntiDDoSPackageId' in params ? params.AntiDDoSPackageId : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * CreateReserveIpAddresses request structure.
 * @class
 */
class CreateReserveIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the VPC.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Reserved private IP address to be applied for.
         * @type {Array.<string> || null}
         */
        this.IpAddresses = null;

        /**
         * Number of reserved private IP addresses that can be automatically assigned with no IP address specified.
         * @type {number || null}
         */
        this.IpAddressCount = null;

        /**
         * Unique ID of the subnet.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Name of the reserved private IP address.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description of the reserved private IP address.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * List of tags to be bound, for example, [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * A string used to ensure the idempotence of the request. This string is generated by the customer and should be unique across different requests, with a maximum length of 64 ASCII characters. If this parameter is not specified, the idempotence of the request cannot be guaranteed.
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.IpAddresses = 'IpAddresses' in params ? params.IpAddresses : null;
        this.IpAddressCount = 'IpAddressCount' in params ? params.IpAddressCount : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * ModifyVpnConnectionAttribute request structure.
 * @class
 */
class ModifyVpnConnectionAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN tunnel instance, such as `vpnx-f49l6u0z`.
         * @type {string || null}
         */
        this.VpnConnectionId = null;

        /**
         * VPN tunnel can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.VpnConnectionName = null;

        /**
         * The pre-shared key.
         * @type {string || null}
         */
        this.PreShareKey = null;

        /**
         * SPD policy group. Taking {"10.0.0.5/24":["172.123.10.5/16"]} as an example, 10.0.0.5/24 is the VPC private IP range, and 172.123.10.5/16 is the IDC IP range. The user specifies the IP range in the VPC that can communicate with the IP range in the IDC.
         * @type {Array.<SecurityPolicyDatabase> || null}
         */
        this.SecurityPolicyDatabases = null;

        /**
         * IKE (Internet Key Exchange) configuration. IKE comes with a self-protection mechanism. The network security protocol is configured by the user.
         * @type {IKEOptionsSpecification || null}
         */
        this.IKEOptionsSpecification = null;

        /**
         * IPSec configuration. The IPSec secure session configuration is provided by Tencent Cloud.
         * @type {IPSECOptionsSpecification || null}
         */
        this.IPSECOptionsSpecification = null;

        /**
         * Whether to enable the tunnel health check. The default value is `False`.
         * @type {boolean || null}
         */
        this.EnableHealthCheck = null;

        /**
         * Local IP address for the tunnel health check
         * @type {string || null}
         */
        this.HealthCheckLocalIp = null;

        /**
         * Peer IP address for the tunnel health check
         * @type {string || null}
         */
        this.HealthCheckRemoteIp = null;

        /**
         * Negotiation type. Valid values: `active` (default value), `passive` and `flowTrigger`.
         * @type {string || null}
         */
        this.NegotiationType = null;

        /**
         * Specifies whether to enable DPD. Valid values: `0` (disable) and `1` (enable)
         * @type {number || null}
         */
        this.DpdEnable = null;

        /**
         * DPD timeout period. Default: 30; unit: second. If the request is not responded within this period, the peer end is considered not exists. This parameter is valid when the value of `DpdEnable` is 1. 
         * @type {string || null}
         */
        this.DpdTimeout = null;

        /**
         * The action after DPD timeout. Valid values: `clear` (disconnect) and `restart` (try again). It’s valid when `DpdEnable` is `1`. 
         * @type {string || null}
         */
        this.DpdAction = null;

        /**
         * Peer gateway ID. You can update tunnels of V4.0 and later gateways.
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnConnectionId = 'VpnConnectionId' in params ? params.VpnConnectionId : null;
        this.VpnConnectionName = 'VpnConnectionName' in params ? params.VpnConnectionName : null;
        this.PreShareKey = 'PreShareKey' in params ? params.PreShareKey : null;

        if (params.SecurityPolicyDatabases) {
            this.SecurityPolicyDatabases = new Array();
            for (let z in params.SecurityPolicyDatabases) {
                let obj = new SecurityPolicyDatabase();
                obj.deserialize(params.SecurityPolicyDatabases[z]);
                this.SecurityPolicyDatabases.push(obj);
            }
        }

        if (params.IKEOptionsSpecification) {
            let obj = new IKEOptionsSpecification();
            obj.deserialize(params.IKEOptionsSpecification)
            this.IKEOptionsSpecification = obj;
        }

        if (params.IPSECOptionsSpecification) {
            let obj = new IPSECOptionsSpecification();
            obj.deserialize(params.IPSECOptionsSpecification)
            this.IPSECOptionsSpecification = obj;
        }
        this.EnableHealthCheck = 'EnableHealthCheck' in params ? params.EnableHealthCheck : null;
        this.HealthCheckLocalIp = 'HealthCheckLocalIp' in params ? params.HealthCheckLocalIp : null;
        this.HealthCheckRemoteIp = 'HealthCheckRemoteIp' in params ? params.HealthCheckRemoteIp : null;
        this.NegotiationType = 'NegotiationType' in params ? params.NegotiationType : null;
        this.DpdEnable = 'DpdEnable' in params ? params.DpdEnable : null;
        this.DpdTimeout = 'DpdTimeout' in params ? params.DpdTimeout : null;
        this.DpdAction = 'DpdAction' in params ? params.DpdAction : null;
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;

    }
}

/**
 * UnassignIpv6CidrBlock request structure.
 * @class
 */
class UnassignIpv6CidrBlockRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC`, such as `vpc-f49l6u0z`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The `IPv6` IP range, such as `3402:4e00:20:1000::/56`
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;

    }
}

/**
 * ModifyAssistantCidr request structure.
 * @class
 */
class ModifyAssistantCidrRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` instance `ID`, such as `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Array of the secondary CIDR blocks to be added, such as ["10.0.0.0/16", "172.16.0.0/16"]. At least one of `NewCidrBlocks` and `OldCidrBlocks` must be specified.
         * @type {Array.<string> || null}
         */
        this.NewCidrBlocks = null;

        /**
         * Array of the secondary CIDR blocks to be deleted, such as ["10.0.0.0/16", "172.16.0.0/16"]. At least one of `NewCidrBlocks` or `OldCidrBlocks` must be specified.
         * @type {Array.<string> || null}
         */
        this.OldCidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NewCidrBlocks = 'NewCidrBlocks' in params ? params.NewCidrBlocks : null;
        this.OldCidrBlocks = 'OldCidrBlocks' in params ? params.OldCidrBlocks : null;

    }
}

/**
 * CreateReserveIpAddresses response structure.
 * @class
 */
class CreateReserveIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information returned from the reserved private IP address.
         * @type {Array.<ReserveIpAddressInfo> || null}
         */
        this.ReserveIpAddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ReserveIpAddressSet) {
            this.ReserveIpAddressSet = new Array();
            for (let z in params.ReserveIpAddressSet) {
                let obj = new ReserveIpAddressInfo();
                obj.deserialize(params.ReserveIpAddressSet[z]);
                this.ReserveIpAddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyGatewayFlowQos response structure.
 * @class
 */
class ModifyGatewayFlowQosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySecurityGroupAttribute response structure.
 * @class
 */
class ModifySecurityGroupAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssociateDirectConnectGatewayNatGateway request structure.
 * @class
 */
class AssociateDirectConnectGatewayNatGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID. VPC instance ID, which can be obtained from the `VpcId` field in the response of the `DescribeVpcs` API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The NAT Gateway ID.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The direct connect gateway ID.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;

    }
}

/**
 * Address information
 * @class
 */
class AddressTemplateItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * ipm-xxxxxxxx
         * @type {string || null}
         */
        this.AddressTemplateId = null;

        /**
         * IP template name
         * @type {string || null}
         */
        this.AddressTemplateName = null;

        /**
         * Disused
         * @type {string || null}
         */
        this.From = null;

        /**
         * Disused
         * @type {string || null}
         */
        this.To = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateId = 'AddressTemplateId' in params ? params.AddressTemplateId : null;
        this.AddressTemplateName = 'AddressTemplateName' in params ? params.AddressTemplateName : null;
        this.From = 'From' in params ? params.From : null;
        this.To = 'To' in params ? params.To : null;

    }
}

/**
 * ModifyAddressAttribute response structure.
 * @class
 */
class ModifyAddressAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachClassicLinkVpc request structure.
 * @class
 */
class AttachClassicLinkVpcRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * CVM Instance ID
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * The gateway traffic monitoring details
 * @class
 */
class GatewayFlowMonitorDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Origin `IP`.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Inbound packets.
         * @type {number || null}
         */
        this.InPkg = null;

        /**
         * Outbound packets.
         * @type {number || null}
         */
        this.OutPkg = null;

        /**
         * Inbound traffic, in Byte.
         * @type {number || null}
         */
        this.InTraffic = null;

        /**
         * Outbound traffic, in Byte.
         * @type {number || null}
         */
        this.OutTraffic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.InPkg = 'InPkg' in params ? params.InPkg : null;
        this.OutPkg = 'OutPkg' in params ? params.OutPkg : null;
        this.InTraffic = 'InTraffic' in params ? params.InTraffic : null;
        this.OutTraffic = 'OutTraffic' in params ? params.OutTraffic : null;

    }
}

/**
 * ResetVpnConnection response structure.
 * @class
 */
class ResetVpnConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAddressesRenewFlag response structure.
 * @class
 */
class ModifyAddressesRenewFlagResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Subnet object
 * @class
 */
class Subnet extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the `VPC` instance.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance `ID`, such as `subnet-bthucmmy`.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Subnet name.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * The `IPv4` `CIDR` of the subnet.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Whether it is the default subnet.
         * @type {boolean || null}
         */
        this.IsDefault = null;

        /**
         * Whether to enable broadcast.
         * @type {boolean || null}
         */
        this.EnableBroadcast = null;

        /**
         * Availability Zone.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * The route table instance ID, such as `rtb-l2h8d7c2`.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The number of available IPv4 addresses
         * @type {number || null}
         */
        this.AvailableIpAddressCount = null;

        /**
         * The `IPv6` `CIDR` of the subnet.
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

        /**
         * The associated `ACL`ID
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Whether it is a `SNAT` address pool subnet.
         * @type {boolean || null}
         */
        this.IsRemoteVpcSnat = null;

        /**
         * The total number of IPv4 addresses in the subnet.
         * @type {number || null}
         */
        this.TotalIpAddressCount = null;

        /**
         * Tag key-value pairs
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * CDC instance ID.
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * Whether the subnet is associated with CDC. valid values: 0 (no), 1 (yes).
         * @type {number || null}
         */
        this.IsCdcSubnet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.EnableBroadcast = 'EnableBroadcast' in params ? params.EnableBroadcast : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.AvailableIpAddressCount = 'AvailableIpAddressCount' in params ? params.AvailableIpAddressCount : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.IsRemoteVpcSnat = 'IsRemoteVpcSnat' in params ? params.IsRemoteVpcSnat : null;
        this.TotalIpAddressCount = 'TotalIpAddressCount' in params ? params.TotalIpAddressCount : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.IsCdcSubnet = 'IsCdcSubnet' in params ? params.IsCdcSubnet : null;

    }
}

/**
 * DeleteNatGatewayDestinationIpPortTranslationNatRule response structure.
 * @class
 */
class DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteVpnGateway request structure.
 * @class
 */
class DeleteVpnGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

    }
}

/**
 * ReplaceRouteTableAssociation response structure.
 * @class
 */
class ReplaceRouteTableAssociationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachCcnInstances request structure.
 * @class
 */
class AttachCcnInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * List of associated network instances
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

        /**
         * The UIN (root account) of the CCN. By default, the current account belongs to the UIN
         * @type {string || null}
         */
        this.CcnUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }
        this.CcnUin = 'CcnUin' in params ? params.CcnUin : null;

    }
}

/**
 * ModifyBandwidthPackageBandwidth response structure.
 * @class
 */
class ModifyBandwidthPackageBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRoutePolicyAssociations request structure.
 * @class
 */
class DeleteRoutePolicyAssociationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Routing policy binding object list. during routing policy unbinding, use the RouteTableId and RoutePolicyId fields of RoutePolicyAssociation (you do not need to fill in the Priority field).
         * @type {Array.<RoutePolicyAssociation> || null}
         */
        this.RoutePolicyAssociationSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RoutePolicyAssociationSet) {
            this.RoutePolicyAssociationSet = new Array();
            for (let z in params.RoutePolicyAssociationSet) {
                let obj = new RoutePolicyAssociation();
                obj.deserialize(params.RoutePolicyAssociationSet[z]);
                this.RoutePolicyAssociationSet.push(obj);
            }
        }

    }
}

/**
 * The instance object associated with a CCN.
 * @class
 */
class CcnInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * The type of the associated instance. Available values are:
<li>`VPC`: VPC</li>
<li>`DIRECTCONNECT`: Direct Connect</li>
<li>`BMVPC`: BM VPC</li>
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * The ID of the associated instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The region to which the associated instance ID belongs, such as `ap-guangzhou`.
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The ID of the route table associated with the instance
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RouteTableId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

    }
}

/**
 * DescribeLocalGateway response structure.
 * @class
 */
class DescribeLocalGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information set of local gateways
         * @type {Array.<LocalGateway> || null}
         */
        this.LocalGatewaySet = null;

        /**
         * Total number of local gateways
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LocalGatewaySet) {
            this.LocalGatewaySet = new Array();
            for (let z in params.LocalGatewaySet) {
                let obj = new LocalGateway();
                obj.deserialize(params.LocalGatewaySet[z]);
                this.LocalGatewaySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The pricing information of a single billing item
 * @class
 */
class ItemPrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * The pay-as-you-go billing method. Unit: CNY.
         * @type {number || null}
         */
        this.UnitPrice = null;

        /**
         * Pay-as-you-go billing method. Value Range: HOUR: Indicates billing by the hour. Scenarios using this hourly billing unit include: Instances postpaid on an hourly basis (POSTPAID_BY_HOUR), and bandwidth postpaid on an hourly basis (BANDWIDTH_POSTPAID_BY_HOUR). GB: Indicates billing on a per-GB basis. Scenarios using this billing unit include: Traffic postpaid on an hourly basis (TRAFFIC_POSTPAID_BY_HOUR).
         * @type {string || null}
         */
        this.ChargeUnit = null;

        /**
         * Original price of the prepaid product. Unit: CNY.
         * @type {number || null}
         */
        this.OriginalPrice = null;

        /**
         * Discount price of the prepaid product. Unit: CNY.
         * @type {number || null}
         */
        this.DiscountPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UnitPrice = 'UnitPrice' in params ? params.UnitPrice : null;
        this.ChargeUnit = 'ChargeUnit' in params ? params.ChargeUnit : null;
        this.OriginalPrice = 'OriginalPrice' in params ? params.OriginalPrice : null;
        this.DiscountPrice = 'DiscountPrice' in params ? params.DiscountPrice : null;

    }
}

/**
 * DeleteNatGateway request structure.
 * @class
 */
class DeleteNatGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

    }
}

/**
 * ModifyCustomerGatewayAttribute response structure.
 * @class
 */
class ModifyCustomerGatewayAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Conflict resource items.
 * @class
 */
class ConflictItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Conflict resource ID
         * @type {string || null}
         */
        this.ConfilctId = null;

        /**
         * Conflict destination resource
         * @type {string || null}
         */
        this.DestinationItem = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConfilctId = 'ConfilctId' in params ? params.ConfilctId : null;
        this.DestinationItem = 'DestinationItem' in params ? params.DestinationItem : null;

    }
}

/**
 * InquiryPriceRenewVpnGateway response structure.
 * @class
 */
class InquiryPriceRenewVpnGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Product price.
         * @type {Price || null}
         */
        this.Price = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Price) {
            let obj = new Price();
            obj.deserialize(params.Price)
            this.Price = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssignIpv6SubnetCidrBlock response structure.
 * @class
 */
class AssignIpv6SubnetCidrBlockResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The assigned `IPv6` subnet IP range list.
         * @type {Array.<Ipv6SubnetCidrBlock> || null}
         */
        this.Ipv6SubnetCidrBlockSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ipv6SubnetCidrBlockSet) {
            this.Ipv6SubnetCidrBlockSet = new Array();
            for (let z in params.Ipv6SubnetCidrBlockSet) {
                let obj = new Ipv6SubnetCidrBlock();
                obj.deserialize(params.Ipv6SubnetCidrBlockSet[z]);
                this.Ipv6SubnetCidrBlockSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpcEndPoint response structure.
 * @class
 */
class CreateVpcEndPointResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint details
         * @type {EndPoint || null}
         */
        this.EndPoint = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.EndPoint) {
            let obj = new EndPoint();
            obj.deserialize(params.EndPoint)
            this.EndPoint = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAssistantCidr response structure.
 * @class
 */
class DeleteAssistantCidrResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCcnRegionBandwidthLimits response structure.
 * @class
 */
class DescribeCcnRegionBandwidthLimitsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The outbound bandwidth caps of all regions connected with the specified CCN instance
         * @type {Array.<CcnRegionBandwidthLimit> || null}
         */
        this.CcnRegionBandwidthLimitSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CcnRegionBandwidthLimitSet) {
            this.CcnRegionBandwidthLimitSet = new Array();
            for (let z in params.CcnRegionBandwidthLimitSet) {
                let obj = new CcnRegionBandwidthLimit();
                obj.deserialize(params.CcnRegionBandwidthLimitSet[z]);
                this.CcnRegionBandwidthLimitSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyTemplateMember request structure.
 * @class
 */
class ModifyTemplateMemberRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter template instance ID, which can be the instance ID of a parameter template of the following four types: IP address, protocol port, IP address group, and protocol port group.
         * @type {string || null}
         */
        this.TemplateId = null;

        /**
         * Information on the parameter template to be modified. The template can be of the following four types: IP address, protocol port, IP address group, and protocol port group. The type should be consistent with that of the template specified by the TemplateId parameter. The parameter sequence should be the same as that of TemplateMember, and the input parameter length should be consistent with that of TemplateMember.
         * @type {Array.<MemberInfo> || null}
         */
        this.OriginalTemplateMember = null;

        /**
         * New parameter template information. The template can be of the following four types: IP address, protocol port, IP address group, and protocol port group. The type should be consistent with that of the template specified by the TemplateId parameter. The parameter sequence should be the same as that of OriginalTemplateMember, and the input parameter length should be consistent with that of OriginalTemplateMember.
         * @type {Array.<MemberInfo> || null}
         */
        this.TemplateMember = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TemplateId = 'TemplateId' in params ? params.TemplateId : null;

        if (params.OriginalTemplateMember) {
            this.OriginalTemplateMember = new Array();
            for (let z in params.OriginalTemplateMember) {
                let obj = new MemberInfo();
                obj.deserialize(params.OriginalTemplateMember[z]);
                this.OriginalTemplateMember.push(obj);
            }
        }

        if (params.TemplateMember) {
            this.TemplateMember = new Array();
            for (let z in params.TemplateMember) {
                let obj = new MemberInfo();
                obj.deserialize(params.TemplateMember[z]);
                this.TemplateMember.push(obj);
            }
        }

    }
}

/**
 * EnableSnapshotPolicies request structure.
 * @class
 */
class EnableSnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {Array.<string> || null}
         */
        this.SnapshotPolicyIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyIds = 'SnapshotPolicyIds' in params ? params.SnapshotPolicyIds : null;

    }
}

/**
 * DescribeAddresses response structure.
 * @class
 */
class DescribeAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of EIPs meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of EIPs details.
         * @type {Array.<Address> || null}
         */
        this.AddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AddressSet) {
            this.AddressSet = new Array();
            for (let z in params.AddressSet) {
                let obj = new Address();
                obj.deserialize(params.AddressSet[z]);
                this.AddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of the gateway bandwidth limit
 * @class
 */
class GatewayQos extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * CVM Private IP.
         * @type {string || null}
         */
        this.IpAddress = null;

        /**
         * Bandwidth limit value.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.IpAddress = 'IpAddress' in params ? params.IpAddress : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * GetCcnRegionBandwidthLimits request structure.
 * @class
 */
class GetCcnRegionBandwidthLimitsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The filter condition.
<li>sregion - String - (Filter condition) Filter by the source region, such as 'ap-guangzhou'.</li>
<li>dregion - String - (Filter condition) Filter by the destination region, such as 'ap-shanghai-bm'.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The sorting condition. Valid values: `BandwidthLimit` and `ExpireTime`.
         * @type {string || null}
         */
        this.SortedBy = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Quantity of returned items
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * In ascending or descending order. Valid values: 'ASC' and 'DESC'.
         * @type {string || null}
         */
        this.OrderBy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.SortedBy = 'SortedBy' in params ? params.SortedBy : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;

    }
}

/**
 * ModifyIpv6AddressesAttribute request structure.
 * @class
 */
class ModifyIpv6AddressesAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The information of the specified private `IPv6` addresses.
         * @type {Array.<Ipv6Address> || null}
         */
        this.Ipv6Addresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.Ipv6Addresses) {
            this.Ipv6Addresses = new Array();
            for (let z in params.Ipv6Addresses) {
                let obj = new Ipv6Address();
                obj.deserialize(params.Ipv6Addresses[z]);
                this.Ipv6Addresses.push(obj);
            }
        }

    }
}

/**
 * DescribeCustomerGatewayVendors request structure.
 * @class
 */
class DescribeCustomerGatewayVendorsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DetachSnapshotInstances request structure.
 * @class
 */
class DetachSnapshotInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Information of instances
         * @type {Array.<SnapshotInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new SnapshotInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * DeleteLocalGateway request structure.
 * @class
 */
class DeleteLocalGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local gateway instance ID
         * @type {string || null}
         */
        this.LocalGatewayId = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocalGatewayId = 'LocalGatewayId' in params ? params.LocalGatewayId : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * ResetVpnGatewayInternetMaxBandwidth response structure.
 * @class
 */
class ResetVpnGatewayInternetMaxBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EIP cost object
 * @class
 */
class AddressChargePrepaid extends  AbstractModel {
    constructor(){
        super();

        /**
         * Purchased usage period, in month. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Setting of renewal. Valid values: 0: manual renewal; 1: auto-renewal; 2: no renewal after expiration. Default value: 0
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Period = 'Period' in params ? params.Period : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;

    }
}

/**
 * DescribeVpnGatewayRoutes response structure.
 * @class
 */
class DescribeVpnGatewayRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Destination routes of the VPN gateway
         * @type {Array.<VpnGatewayRoute> || null}
         */
        this.Routes = null;

        /**
         * 
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpnGatewayRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetworkAcls response structure.
 * @class
 */
class DescribeNetworkAclsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of instance details.
         * @type {Array.<NetworkAcl> || null}
         */
        this.NetworkAclSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkAclSet) {
            this.NetworkAclSet = new Array();
            for (let z in params.NetworkAclSet) {
                let obj = new NetworkAcl();
                obj.deserialize(params.NetworkAclSet[z]);
                this.NetworkAclSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNatGatewayDirectConnectGatewayRoute request structure.
 * @class
 */
class DescribeNatGatewayDirectConnectGatewayRouteRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the NAT gateway
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Unique ID of VPC
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Valid range: 0-200
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Greater than 0
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DeleteFlowLog response structure.
 * @class
 */
class DeleteFlowLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachCcnInstances response structure.
 * @class
 */
class AttachCcnInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDefaultVpc response structure.
 * @class
 */
class CreateDefaultVpcResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Default VPC and subnet IDs
         * @type {DefaultVpcSubnet || null}
         */
        this.Vpc = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Vpc) {
            let obj = new DefaultVpcSubnet();
            obj.deserialize(params.Vpc)
            this.Vpc = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpcAttribute response structure.
 * @class
 */
class ModifyVpcAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpnConnectionAttribute response structure.
 * @class
 */
class ModifyVpnConnectionAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Private IP information
 * @class
 */
class PrivateIpAddressSpecification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Private IP address.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Whether it is a primary IP.
         * @type {boolean || null}
         */
        this.Primary = null;

        /**
         * Public IP address.
         * @type {string || null}
         */
        this.PublicIpAddress = null;

        /**
         * EIP instance ID, such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * Private IP description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Whether the public IP is blocked.
         * @type {boolean || null}
         */
        this.IsWanIpBlocked = null;

        /**
         * IP status:
PENDING: Creating
MIGRATING: Migrating
DELETING: Deleting
AVAILABLE: Available
         * @type {string || null}
         */
        this.State = null;

        /**
         * IP service level. Values: PT` (Gold), `AU` (Silver), `AG `(Bronze) and DEFAULT` (Default).
         * @type {string || null}
         */
        this.QosLevel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.Primary = 'Primary' in params ? params.Primary : null;
        this.PublicIpAddress = 'PublicIpAddress' in params ? params.PublicIpAddress : null;
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.IsWanIpBlocked = 'IsWanIpBlocked' in params ? params.IsWanIpBlocked : null;
        this.State = 'State' in params ? params.State : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;

    }
}

/**
 * ALG protocol type
 * @class
 */
class AlgType extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether FTP ALG is enabled
         * @type {boolean || null}
         */
        this.Ftp = null;

        /**
         * Whether SIP ALG is enabled
         * @type {boolean || null}
         */
        this.Sip = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ftp = 'Ftp' in params ? params.Ftp : null;
        this.Sip = 'Sip' in params ? params.Sip : null;

    }
}

/**
 * MigratePrivateIpAddress response structure.
 * @class
 */
class MigratePrivateIpAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUsedIpAddress request structure.
 * @class
 */
class DescribeUsedIpAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * List of IPs to be queried. The IPs must be within the VPC or subnet. Up to 100 IPs can be queried at a time.
         * @type {Array.<string> || null}
         */
        this.IpAddresses = null;

        /**
         * The offset. Default value: 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.IpAddresses = 'IpAddresses' in params ? params.IpAddresses : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteRouteTable response structure.
 * @class
 */
class DeleteRouteTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcInstances response structure.
 * @class
 */
class DescribeVpcInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of CVM instances.
         * @type {Array.<CvmInstance> || null}
         */
        this.InstanceSet = null;

        /**
         * The number of eligible CVM instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceSet) {
            this.InstanceSet = new Array();
            for (let z in params.InstanceSet) {
                let obj = new CvmInstance();
                obj.deserialize(params.InstanceSet[z]);
                this.InstanceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Account attribute object
 * @class
 */
class AccountAttribute extends  AbstractModel {
    constructor(){
        super();

        /**
         * Attribute name
         * @type {string || null}
         */
        this.AttributeName = null;

        /**
         * Attribute values
         * @type {Array.<string> || null}
         */
        this.AttributeValues = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AttributeName = 'AttributeName' in params ? params.AttributeName : null;
        this.AttributeValues = 'AttributeValues' in params ? params.AttributeValues : null;

    }
}

/**
 * AllocateIPv6Addresses response structure.
 * @class
 */
class AllocateIPv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique IDs of applied EIPv6 addresses.
         * @type {Array.<string> || null}
         */
        this.AddressSet = null;

        /**
         * Async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressSet = 'AddressSet' in params ? params.AddressSet : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSnapshotPolicies request structure.
 * @class
 */
class DeleteSnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {Array.<string> || null}
         */
        this.SnapshotPolicyIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyIds = 'SnapshotPolicyIds' in params ? params.SnapshotPolicyIds : null;

    }
}

/**
 * DeleteDirectConnectGatewayCcnRoutes request structure.
 * @class
 */
class DeleteDirectConnectGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the Direct Connect gateway, such as `dcg-prpqlmg1`
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The route ID, such as `ccnr-f49l6u0z`.
         * @type {Array.<string> || null}
         */
        this.RouteIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;

    }
}

/**
 * ModifyNatGatewaySourceIpTranslationNatRule response structure.
 * @class
 */
class ModifyNatGatewaySourceIpTranslationNatRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNatGatewayDestinationIpPortTranslationNatRule request structure.
 * @class
 */
class CreateNatGatewayDestinationIpPortTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The port forwarding rules of the NAT gateway.
         * @type {Array.<DestinationIpPortTranslationNatRule> || null}
         */
        this.DestinationIpPortTranslationNatRules = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.DestinationIpPortTranslationNatRules) {
            this.DestinationIpPortTranslationNatRules = new Array();
            for (let z in params.DestinationIpPortTranslationNatRules) {
                let obj = new DestinationIpPortTranslationNatRule();
                obj.deserialize(params.DestinationIpPortTranslationNatRules[z]);
                this.DestinationIpPortTranslationNatRules.push(obj);
            }
        }

    }
}

/**
 * CreateFlowLog request structure.
 * @class
 */
class CreateFlowLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The name of the flow log instance.
         * @type {string || null}
         */
        this.FlowLogName = null;

        /**
         * The type of resource associated with the flow log. Valid values: `VPC`, `SUBNET`, `NETWORKINTERFACE`, `CCN`, `NAT`, and `DCG`.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The unique ID of the resource.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Type of the flow logs to be collected. Valid values: `ACCEPT`, `REJECT` and `ALL`.
         * @type {string || null}
         */
        this.TrafficType = null;

        /**
         * The VPC ID or unique ID of the resource. We recommend using the unique ID. This parameter is required unless the `ResourceType` is set to `CCN`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The description of the flow log.
         * @type {string || null}
         */
        this.FlowLogDescription = null;

        /**
         * The storage ID of the flow log.
         * @type {string || null}
         */
        this.CloudLogId = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Consumer types: `cls` and `ckafka`
         * @type {string || null}
         */
        this.StorageType = null;

        /**
         * Information of the flow log consumer, which is required when the consumer type is `ckafka`.
         * @type {FlowLogStorage || null}
         */
        this.FlowLogStorage = null;

        /**
         * The region corresponding to the flow log storage ID. If not passed in, this field defaults to the current region.
         * @type {string || null}
         */
        this.CloudLogRegion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowLogName = 'FlowLogName' in params ? params.FlowLogName : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.TrafficType = 'TrafficType' in params ? params.TrafficType : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.FlowLogDescription = 'FlowLogDescription' in params ? params.FlowLogDescription : null;
        this.CloudLogId = 'CloudLogId' in params ? params.CloudLogId : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.StorageType = 'StorageType' in params ? params.StorageType : null;

        if (params.FlowLogStorage) {
            let obj = new FlowLogStorage();
            obj.deserialize(params.FlowLogStorage)
            this.FlowLogStorage = obj;
        }
        this.CloudLogRegion = 'CloudLogRegion' in params ? params.CloudLogRegion : null;

    }
}

/**
 * InquirePriceCreateDirectConnectGateway request structure.
 * @class
 */
class InquirePriceCreateDirectConnectGatewayRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * AttachNetworkInterface response structure.
 * @class
 */
class AttachNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateNatGatewayAddress request structure.
 * @class
 */
class DisassociateNatGatewayAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * Array of the EIPs to be unbound from the NAT gateway.
         * @type {Array.<string> || null}
         */
        this.PublicIpAddresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.PublicIpAddresses = 'PublicIpAddresses' in params ? params.PublicIpAddresses : null;

    }
}

/**
 * DescribeTrafficPackages response structure.
 * @class
 */
class DescribeTrafficPackagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible traffic packages
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Traffic package information
         * @type {Array.<TrafficPackage> || null}
         */
        this.TrafficPackageSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.TrafficPackageSet) {
            this.TrafficPackageSet = new Array();
            for (let z in params.TrafficPackageSet) {
                let obj = new TrafficPackage();
                obj.deserialize(params.TrafficPackageSet[z]);
                this.TrafficPackageSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeServiceTemplates response structure.
 * @class
 */
class DescribeServiceTemplatesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Protocol port template object.
         * @type {Array.<ServiceTemplate> || null}
         */
        this.ServiceTemplateSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ServiceTemplateSet) {
            this.ServiceTemplateSet = new Array();
            for (let z in params.ServiceTemplateSet) {
                let obj = new ServiceTemplate();
                obj.deserialize(params.ServiceTemplateSet[z]);
                this.ServiceTemplateSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRouteTables request structure.
 * @class
 */
class DescribeRouteTablesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter condition. `RouteTableIds` and `Filters` cannot be specified at the same time.
<li>route-table-id - String - (Filter condition) Route table instance ID.</li>
<li>route-table-name - String - (Filter condition) Route table name.</li>
<li>vpc-id - String - (Filter condition) VPC instance ID, such as `vpc-f49l6u0z`.</li>
<li>association.main - String - (Filter condition) Whether it is the main route table.</li>
<li>tag-key - String - Required: no - (Filter condition) Filter by tag key.</li>
<li>tag:tag-key - String - Required: no - (Filter condition) Filter by tag key-value pair. Use a specific tag key to replace `tag-key`. See Example 2 for the detailed usage.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {Array.<string> || null}
         */
        this.RouteTableIds = null;

        /**
         * Offset.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * The number of request objects.
         * @type {string || null}
         */
        this.Limit = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.NeedRouterInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.RouteTableIds = 'RouteTableIds' in params ? params.RouteTableIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.NeedRouterInfo = 'NeedRouterInfo' in params ? params.NeedRouterInfo : null;

    }
}

/**
 * ResetAttachCcnInstances request structure.
 * @class
 */
class ResetAttachCcnInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The UIN (root account) to which the CCN belongs.
         * @type {string || null}
         */
        this.CcnUin = null;

        /**
         * The list of network instances that re-apply for association.
         * @type {Array.<CcnInstance> || null}
         */
        this.Instances = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.CcnUin = 'CcnUin' in params ? params.CcnUin : null;

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new CcnInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }

    }
}

/**
 * CreateHaVip response structure.
 * @class
 */
class CreateHaVipResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * `HAVIP` object.
         * @type {HaVip || null}
         */
        this.HaVip = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HaVip) {
            let obj = new HaVip();
            obj.deserialize(params.HaVip)
            this.HaVip = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroupReferences request structure.
 * @class
 */
class DescribeSecurityGroupReferencesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * A set of security group instance IDs, e.g. ['sg-12345678']
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * DescribeVpcPrivateIpAddresses response structure.
 * @class
 */
class DescribeVpcPrivateIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of private `IP` address information.
         * @type {Array.<VpcPrivateIpAddress> || null}
         */
        this.VpcPrivateIpAddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VpcPrivateIpAddressSet) {
            this.VpcPrivateIpAddressSet = new Array();
            for (let z in params.VpcPrivateIpAddressSet) {
                let obj = new VpcPrivateIpAddress();
                obj.deserialize(params.VpcPrivateIpAddressSet[z]);
                this.VpcPrivateIpAddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyReserveIpAddress request structure.
 * @class
 */
class ModifyReserveIpAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the VPC.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unique ID of the reserved private IP address.
         * @type {string || null}
         */
        this.ReserveIpId = null;

        /**
         * Name of the reserved private IP address.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description of the reserved private IP address.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.ReserveIpId = 'ReserveIpId' in params ? params.ReserveIpId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * Returns multi-operator IPv6 Cidr Block.
 * @class
 */
class ISPIPv6CidrBlock extends  AbstractModel {
    constructor(){
        super();

        /**
         * IPv6 CIdr Block
         * @type {string || null}
         */
        this.IPv6CidrBlock = null;

        /**
         * Network operator type. valid values: 'BGP' (default), 'CMCC' (china mobile), 'CTCC' (china telecom), 'CUCC' (china unicom).
         * @type {string || null}
         */
        this.ISPType = null;

        /**
         * Specifies the type of IPv6 Cidr: `GUA` (global unicast address), `ULA` (unique local address).
         * @type {string || null}
         */
        this.AddressType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6CidrBlock = 'IPv6CidrBlock' in params ? params.IPv6CidrBlock : null;
        this.ISPType = 'ISPType' in params ? params.ISPType : null;
        this.AddressType = 'AddressType' in params ? params.AddressType : null;

    }
}

/**
 * DisableRoutes request structure.
 * @class
 */
class DisableRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique route table ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Routing policy ID. This parameter cannot be used simultaneously with RouteItemIds, but at least one of them should be entered. The value of this parameter can be obtained by querying the route list ([DescribeRouteTables](https://intl.cloud.tencent.com/document/product/215/15763?from_cn_redirect=1)).
         * @type {Array.<number> || null}
         */
        this.RouteIds = null;

        /**
         * Unique routing policy ID. This parameter cannot be used simultaneously with RouteIds, but at least one of them should be entered. The value of this parameter can be obtained by querying the route list ([DescribeRouteTables](https://intl.cloud.tencent.com/document/product/215/15763?from_cn_redirect=1)).
         * @type {Array.<string> || null}
         */
        this.RouteItemIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;
        this.RouteItemIds = 'RouteItemIds' in params ? params.RouteItemIds : null;

    }
}

/**
 * DisassociateDirectConnectGatewayNatGateway request structure.
 * @class
 */
class DisassociateDirectConnectGatewayNatGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The direct connect gateway ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The NAT Gateway ID.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The ID of the VPC instance, which can be obtained from the `VpcId` field in response of the `DescribeVpcs` API.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;

    }
}

/**
 * ReleaseIPv6Addresses request structure.
 * @class
 */
class ReleaseIPv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the IPv6 address.
         * @type {Array.<string> || null}
         */
        this.IPv6AddressIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressIds = 'IPv6AddressIds' in params ? params.IPv6AddressIds : null;

    }
}

/**
 * DisassociateIPv6Address response structure.
 * @class
 */
class DisassociateIPv6AddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAddressTemplateGroups response structure.
 * @class
 */
class DescribeAddressTemplateGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * IP address template.
         * @type {Array.<AddressTemplateGroup> || null}
         */
        this.AddressTemplateGroupSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AddressTemplateGroupSet) {
            this.AddressTemplateGroupSet = new Array();
            for (let z in params.AddressTemplateGroupSet) {
                let obj = new AddressTemplateGroup();
                obj.deserialize(params.AddressTemplateGroupSet[z]);
                this.AddressTemplateGroupSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReleaseAddresses request structure.
 * @class
 */
class ReleaseAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID list of the EIP. The unique ID of an EIP is as follows: `eip-11112222`.
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;

    }
}

/**
 * CreateDirectConnectGatewayCcnRoutes request structure.
 * @class
 */
class CreateDirectConnectGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the Direct Connect gateway, such as `dcg-prpqlmg1`
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * The list of IDC IP range that must be connected
         * @type {Array.<DirectConnectGatewayCcnRoute> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new DirectConnectGatewayCcnRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * CreateDirectConnectGatewayCcnRoutes response structure.
 * @class
 */
class CreateDirectConnectGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRouteTable request structure.
 * @class
 */
class CreateRouteTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPC instance to be operated on. You can obtain the parameter value from the VpcId field in the returned result of DescribeVpcs API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The route table name. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.RouteTableName = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.RouteTableName = 'RouteTableName' in params ? params.RouteTableName : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * MigrateNetworkInterface request structure.
 * @class
 */
class MigrateNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The ID of the CVM bound to the ENI, such as `ins-r8hr2upy`.
         * @type {string || null}
         */
        this.SourceInstanceId = null;

        /**
         * ID of the destination CVM instance to be migrated.
         * @type {string || null}
         */
        this.DestinationInstanceId = null;

        /**
         * ENI mount method. Valid values: 0: standard; 1: extension; default value: 0
         * @type {number || null}
         */
        this.AttachType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.SourceInstanceId = 'SourceInstanceId' in params ? params.SourceInstanceId : null;
        this.DestinationInstanceId = 'DestinationInstanceId' in params ? params.DestinationInstanceId : null;
        this.AttachType = 'AttachType' in params ? params.AttachType : null;

    }
}

/**
 * DescribeCustomerGateways request structure.
 * @class
 */
class DescribeCustomerGatewaysRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Customer gateway ID, such as `cgw-2wqq41m9`. Each request can have a maximum of 100 instances. `CustomerGatewayIds` and `Filters` cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.CustomerGatewayIds = null;

        /**
         * The filter condition. For details, see the Instance Filter Conditions Table. The upper limit for `Filters` in each request is 10 and 5 for `Filter.Values`. `CustomerGatewayIds` and `Filters` cannot be specified at the same time.
<li>customer-gateway-id - String - (Filter condition) The unique ID of the user gateway, such as `cgw-mgp33pll`.</li>
<li>customer-gateway-name - String - (Filter condition) The name of the user gateway, such as `test-cgw`.</li>
<li>ip-address - String - (Filter condition) The public IP address, such as `58.211.1.12`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0. For more information on Offset, see the relevant section in the API [Introduction](https://intl.cloud.tencent.com/document/api/213/11646?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayIds = 'CustomerGatewayIds' in params ? params.CustomerGatewayIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DisableRoutes response structure.
 * @class
 */
class DisableRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySnapshotPolicies request structure.
 * @class
 */
class ModifySnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Modify snapshot policies
         * @type {Array.<BatchModifySnapshotPolicy> || null}
         */
        this.SnapshotPoliciesInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SnapshotPoliciesInfo) {
            this.SnapshotPoliciesInfo = new Array();
            for (let z in params.SnapshotPoliciesInfo) {
                let obj = new BatchModifySnapshotPolicy();
                obj.deserialize(params.SnapshotPoliciesInfo[z]);
                this.SnapshotPoliciesInfo.push(obj);
            }
        }

    }
}

/**
 * ModifyAddressAttribute request structure.
 * @class
 */
class ModifyAddressAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the EIP, such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The EIP name after modification. The maximum length is 20 characters.
         * @type {string || null}
         */
        this.AddressName = null;

        /**
         * Whether the set EIP is a direct connection EIP. TRUE: yes. FALSE: no. Note that this parameter is available only to users who have activated the EIP direct connection function.
         * @type {string || null}
         */
        this.EipDirectConnection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.AddressName = 'AddressName' in params ? params.AddressName : null;
        this.EipDirectConnection = 'EipDirectConnection' in params ? params.EipDirectConnection : null;

    }
}

/**
 * DeleteAssistantCidr request structure.
 * @class
 */
class DeleteAssistantCidrRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `VPC` instance `ID`, such as `vpc-6v2ht8q5`.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Array of CIDR blocks, such as ["10.0.0.0/16", "172.16.0.0/16"]
         * @type {Array.<string> || null}
         */
        this.CidrBlocks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.CidrBlocks = 'CidrBlocks' in params ? params.CidrBlocks : null;

    }
}

/**
 * ModifyVpcEndPointServiceWhiteList response structure.
 * @class
 */
class ModifyVpcEndPointServiceWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Subnet object
 * @class
 */
class SubnetInput extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `CIDR` of the subnet.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Subnet name.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * The availability zone, such as `ap-guangzhou-2`.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * The specified associated route table, such as `rtb-3ryrwzuu`.
         * @type {string || null}
         */
        this.RouteTableId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

    }
}

/**
 * DescribeNatGatewayDirectConnectGatewayRoute response structure.
 * @class
 */
class DescribeNatGatewayDirectConnectGatewayRouteResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route data
         * @type {Array.<NatDirectConnectGatewayRoute> || null}
         */
        this.NatDirectConnectGatewayRouteSet = null;

        /**
         * Total number of routes
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NatDirectConnectGatewayRouteSet) {
            this.NatDirectConnectGatewayRouteSet = new Array();
            for (let z in params.NatDirectConnectGatewayRouteSet) {
                let obj = new NatDirectConnectGatewayRoute();
                obj.deserialize(params.NatDirectConnectGatewayRouteSet[z]);
                this.NatDirectConnectGatewayRouteSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EnableVpcEndPointConnect response structure.
 * @class
 */
class EnableVpcEndPointConnectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNetDetect response structure.
 * @class
 */
class CreateNetDetectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The network detection (NetDetect) object.
         * @type {NetDetect || null}
         */
        this.NetDetect = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetDetect) {
            let obj = new NetDetect();
            obj.deserialize(params.NetDetect)
            this.NetDetect = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InquiryPriceAllocateAddresses response structure.
 * @class
 */
class InquiryPriceAllocateAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * EIP price
         * @type {InternetPrice || null}
         */
        this.Price = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Price) {
            let obj = new InternetPrice();
            obj.deserialize(params.Price)
            this.Price = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCcn request structure.
 * @class
 */
class DeleteCcnRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

    }
}

/**
 * ModifyLocalGateway response structure.
 * @class
 */
class ModifyLocalGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssociateNetworkInterfaceSecurityGroups response structure.
 * @class
 */
class AssociateNetworkInterfaceSecurityGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EnableFlowLogs request structure.
 * @class
 */
class EnableFlowLogsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow log ID.
         * @type {Array.<string> || null}
         */
        this.FlowLogIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowLogIds = 'FlowLogIds' in params ? params.FlowLogIds : null;

    }
}

/**
 * ModifyVpnGatewayAttribute request structure.
 * @class
 */
class ModifyVpnGatewayAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The VPN gateway name. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.VpnGatewayName = null;

        /**
         * VPN gateway billing mode. Currently, only the conversion of prepaid (monthly subscription) to postpaid (that is, pay-as-you-go) is supported. That is, the parameters only supports POSTPAID_BY_HOUR.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.VpnGatewayName = 'VpnGatewayName' in params ? params.VpnGatewayName : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

    }
}

/**
 * CreateNatGateway request structure.
 * @class
 */
class CreateNatGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * NAT gateway name
         * @type {string || null}
         */
        this.NatGatewayName = null;

        /**
         * The ID of the VPC instance, which can be obtained from the `VpcId` field in response of the `DescribeVpcs` API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The maximum outbound bandwidth of the NAT gateway (unit: Mbps). Supported parameter values: `20, 50, 100, 200, 500, 1000, 2000, 5000`. Default: `100`.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * The concurrent connection cap of the NAT gateway. Values: `1000000, 3000000, 10000000`. The default value is `1000000`.
         * @type {number || null}
         */
        this.MaxConcurrentConnection = null;

        /**
         * The number of EIPs that you want to apply for. Either `AddressCount` or `PublicIpAddresses` must be passed in.
         * @type {number || null}
         */
        this.AddressCount = null;

        /**
         * The EIP array bound to the NAT gateway. Either AddressCount or PublicIpAddresses must be passed in.
         * @type {Array.<string> || null}
         */
        this.PublicIpAddresses = null;

        /**
         * The availability zone, such as `ap-guangzhou-1`.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}]
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Subnet of the NAT gateway
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The bandwidth size (in Mbps) of the EIP bound to the NAT gateway, which defaults to the maximum value applicable for the current user type.
         * @type {number || null}
         */
        this.StockPublicIpAddressesBandwidthOut = null;

        /**
         * The size of the public network IP bandwidth to be applied for (in Mbps), which defaults to the maximum value applicable for the current user type.
         * @type {number || null}
         */
        this.PublicIpAddressesBandwidthOut = null;

        /**
         * Whether the public IP and the NAT gateway must be in the same availability zone. Valid values: `true` and `false`. This parameter is valid only when `Zone` is specified.
         * @type {boolean || null}
         */
        this.PublicIpFromSameZone = null;

        /**
         * NAT gateway major version. `1`: Classic, `2`: Standard
         * @type {number || null}
         */
        this.NatProductVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayName = 'NatGatewayName' in params ? params.NatGatewayName : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.MaxConcurrentConnection = 'MaxConcurrentConnection' in params ? params.MaxConcurrentConnection : null;
        this.AddressCount = 'AddressCount' in params ? params.AddressCount : null;
        this.PublicIpAddresses = 'PublicIpAddresses' in params ? params.PublicIpAddresses : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.StockPublicIpAddressesBandwidthOut = 'StockPublicIpAddressesBandwidthOut' in params ? params.StockPublicIpAddressesBandwidthOut : null;
        this.PublicIpAddressesBandwidthOut = 'PublicIpAddressesBandwidthOut' in params ? params.PublicIpAddressesBandwidthOut : null;
        this.PublicIpFromSameZone = 'PublicIpFromSameZone' in params ? params.PublicIpFromSameZone : null;
        this.NatProductVersion = 'NatProductVersion' in params ? params.NatProductVersion : null;

    }
}

/**
 * DeleteNetDetect request structure.
 * @class
 */
class DeleteNetDetectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of a network probe, such as `netd-12345678`.
         * @type {string || null}
         */
        this.NetDetectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetDetectId = 'NetDetectId' in params ? params.NetDetectId : null;

    }
}

/**
 * IPSec configuration. The IPSec secure session configuration is provided by Tencent Cloud.
 * @class
 */
class IPSECOptionsSpecification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Encryption algorithm. Valid values: `3DES-CBC`, `AES-CBC-128`, `AES-CBC-192`, `AES-CBC-256`, `DES-CBC`, `SM4`, and `NULL`; default value: `AES-CBC-128`.
         * @type {string || null}
         */
        this.EncryptAlgorithm = null;

        /**
         * Authentication algorithm. Valid values: `MD5`, `SHA1` and `SHA-256`; default value: `SHA1`.
         * @type {string || null}
         */
        this.IntegrityAlgorith = null;

        /**
         * IPsec SA lifetime (in sec). Value range: 180-604800
         * @type {number || null}
         */
        this.IPSECSaLifetimeSeconds = null;

        /**
         * PFS. Available value: 'NULL', 'DH-GROUP1', 'DH-GROUP2', 'DH-GROUP5', 'DH-GROUP14', and 'DH-GROUP24'. Default is NULL.
         * @type {string || null}
         */
        this.PfsDhGroup = null;

        /**
         * IPsec SA lifetime (in KB). Value range: 2560-604800
         * @type {number || null}
         */
        this.IPSECSaLifetimeTraffic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EncryptAlgorithm = 'EncryptAlgorithm' in params ? params.EncryptAlgorithm : null;
        this.IntegrityAlgorith = 'IntegrityAlgorith' in params ? params.IntegrityAlgorith : null;
        this.IPSECSaLifetimeSeconds = 'IPSECSaLifetimeSeconds' in params ? params.IPSECSaLifetimeSeconds : null;
        this.PfsDhGroup = 'PfsDhGroup' in params ? params.PfsDhGroup : null;
        this.IPSECSaLifetimeTraffic = 'IPSECSaLifetimeTraffic' in params ? params.IPSECSaLifetimeTraffic : null;

    }
}

/**
 * CreateSnapshotPolicies request structure.
 * @class
 */
class CreateSnapshotPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details of a snapshot policy
         * @type {Array.<SnapshotPolicy> || null}
         */
        this.SnapshotPolicies = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SnapshotPolicies) {
            this.SnapshotPolicies = new Array();
            for (let z in params.SnapshotPolicies) {
                let obj = new SnapshotPolicy();
                obj.deserialize(params.SnapshotPolicies[z]);
                this.SnapshotPolicies.push(obj);
            }
        }

    }
}

/**
 * UnassignIpv6Addresses request structure.
 * @class
 */
class UnassignIpv6AddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The list of specified `IPv6` addresses. A maximum of 10 can be specified each time.
         * @type {Array.<Ipv6Address> || null}
         */
        this.Ipv6Addresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.Ipv6Addresses) {
            this.Ipv6Addresses = new Array();
            for (let z in params.Ipv6Addresses) {
                let obj = new Ipv6Address();
                obj.deserialize(params.Ipv6Addresses[z]);
                this.Ipv6Addresses.push(obj);
            }
        }

    }
}

/**
 * CreateAndAttachNetworkInterface response structure.
 * @class
 */
class CreateAndAttachNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ENI instance.
         * @type {NetworkInterface || null}
         */
        this.NetworkInterface = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkInterface) {
            let obj = new NetworkInterface();
            obj.deserialize(params.NetworkInterface)
            this.NetworkInterface = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCcnAttribute request structure.
 * @class
 */
class ModifyCcnAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID, such as `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The name of CCN instance. Up to 60 characters allowed. It can contain up to 60 bytes. Either `CcnName` or `CcnDescription` must be specified.
         * @type {string || null}
         */
        this.CcnName = null;

        /**
         * The description of CCN instance. Up to 100 characters allowed. It can contain up to 60 bytes. Either `CcnName` or `CcnDescription` must be specified.
         * @type {string || null}
         */
        this.CcnDescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.CcnName = 'CcnName' in params ? params.CcnName : null;
        this.CcnDescription = 'CcnDescription' in params ? params.CcnDescription : null;

    }
}

/**
 * Information of associated resources
 * @class
 */
class ResourceStatistics extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID, such as vpc-f1xjkw1b.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet instance ID, such as `subnet-bthucmmy`.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The total number of used IP addresses.
         * @type {number || null}
         */
        this.Ip = null;

        /**
         * Information of associated resources
         * @type {Array.<ResourceStatisticsItem> || null}
         */
        this.ResourceStatisticsItemSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Ip = 'Ip' in params ? params.Ip : null;

        if (params.ResourceStatisticsItemSet) {
            this.ResourceStatisticsItemSet = new Array();
            for (let z in params.ResourceStatisticsItemSet) {
                let obj = new ResourceStatisticsItem();
                obj.deserialize(params.ResourceStatisticsItemSet[z]);
                this.ResourceStatisticsItemSet.push(obj);
            }
        }

    }
}

/**
 * DeleteSecurityGroupPolicies response structure.
 * @class
 */
class DeleteSecurityGroupPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpcEndPointService response structure.
 * @class
 */
class CreateVpcEndPointServiceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint service details
         * @type {EndPointService || null}
         */
        this.EndPointService = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.EndPointService) {
            let obj = new EndPointService();
            obj.deserialize(params.EndPointService)
            this.EndPointService = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNetworkAclAttribute request structure.
 * @class
 */
class ModifyNetworkAclAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Network ACL name, which can contain up to 60 bytes.
         * @type {string || null}
         */
        this.NetworkAclName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.NetworkAclName = 'NetworkAclName' in params ? params.NetworkAclName : null;

    }
}

/**
 * SetVpnGatewaysRenewFlag response structure.
 * @class
 */
class SetVpnGatewaysRenewFlagResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteVpnGateway response structure.
 * @class
 */
class DeleteVpnGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHaVips request structure.
 * @class
 */
class DescribeHaVipsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the `HAVIP`, such as `havip-9o233uri`.
         * @type {Array.<string> || null}
         */
        this.HaVipIds = null;

        /**
         * Filter condition. `HaVipIds` and `Filters` cannot be specified at the same time.
li>havip-id - String - The unique ID of the HAVIP, such as `havip-9o233uri`.</li>
<li>havip-name - String - HAVIP name.</li>
<li>vpc-id - String - VPC ID of the HAVIP.</li>
<li>subnet-id - String - Subnet ID of the HAVIP.</li>
<li>vip - String - Virtual IP address of the HAVIP.</li>
<li>address-ip - String - Bound EIP.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipIds = 'HaVipIds' in params ? params.HaVipIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Snapshot policy
 * @class
 */
class SnapshotPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy name
         * @type {string || null}
         */
        this.SnapshotPolicyName = null;

        /**
         * Backup policy type. Values: `operate` (Manual backup); `time` (Scheduled backup)
         * @type {string || null}
         */
        this.BackupType = null;

        /**
         * Snapshot retention period in days. Range: 1 to 365.
         * @type {number || null}
         */
        this.KeepTime = null;

        /**
         * Whether to create a new COS bucket. It defaults to `False`.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CreateNewCos = null;

        /**
         * Region of the COS bucket
         * @type {string || null}
         */
        this.CosRegion = null;

        /**
         * COS bucket
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * Snapshot policy ID
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Scheduled backup policies
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<BackupPolicy> || null}
         */
        this.BackupPolicies = null;

        /**
         * Whether to enable the policy. Values: `True` (default), `False`
         * @type {boolean || null}
         */
        this.Enable = null;

        /**
         * Creation time
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyName = 'SnapshotPolicyName' in params ? params.SnapshotPolicyName : null;
        this.BackupType = 'BackupType' in params ? params.BackupType : null;
        this.KeepTime = 'KeepTime' in params ? params.KeepTime : null;
        this.CreateNewCos = 'CreateNewCos' in params ? params.CreateNewCos : null;
        this.CosRegion = 'CosRegion' in params ? params.CosRegion : null;
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;

        if (params.BackupPolicies) {
            this.BackupPolicies = new Array();
            for (let z in params.BackupPolicies) {
                let obj = new BackupPolicy();
                obj.deserialize(params.BackupPolicies[z]);
                this.BackupPolicies.push(obj);
            }
        }
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * InquiryPriceModifyAddressesBandwidth response structure.
 * @class
 */
class InquiryPriceModifyAddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Inquiry results for adjusting EIP bandwidth.
         * @type {InternetPrice || null}
         */
        this.Price = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Price) {
            let obj = new InternetPrice();
            obj.deserialize(params.Price)
            this.Price = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnassignPrivateIpAddresses response structure.
 * @class
 */
class UnassignPrivateIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Detailed EIP information
 * @class
 */
class Address extends  AbstractModel {
    constructor(){
        super();

        /**
         * `EIP` `ID`, the unique ID of the `EIP`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The `EIP` name.
         * @type {string || null}
         */
        this.AddressName = null;

        /**
         * Possible `EIP` states are 'CREATING', 'BINDING', 'BIND', 'UNBINDING', 'UNBIND', 'OFFLINING', and 'BIND_ENI'.
         * @type {string || null}
         */
        this.AddressStatus = null;

        /**
         * The public IP address
         * @type {string || null}
         */
        this.AddressIp = null;

        /**
         * The ID of the bound resource instance. This can be a `CVM` or `NAT`.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The creation time, which follows the `ISO8601` standard and uses `UTC` time in the format of `YYYY-MM-DDThh:mm:ssZ`.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The ID of the bound ENI
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The private IP of the bound resources
         * @type {string || null}
         */
        this.PrivateAddressIp = null;

        /**
         * The isolation status of the resource. `True` indicates the EIP is isolated. `False` indicates that the resource is not isolated.
         * @type {boolean || null}
         */
        this.IsArrears = null;

        /**
         * The block status of the resource. `True` indicates the EIP is blocked. `False` indicates that the EIP is not blocked.
         * @type {boolean || null}
         */
        this.IsBlocked = null;

        /**
         * Whether the EIP supports direct connection mode. `True` indicates the EIP supports direct connection. `False` indicates that the resource does not support direct connection.
         * @type {boolean || null}
         */
        this.IsEipDirectConnection = null;

        /**
         * EIP resource type. Valid values: `CalcIP` (device IP), `WanIP` (public IP), `EIP` (elastic IP), `AnycastEIP` (accelerated EIP), and `AntiDDoSEIP` (anti-DDoS EIP).
         * @type {string || null}
         */
        this.AddressType = null;

        /**
         * Whether the EIP is automatically released after being unbound. `True` indicates the EIP will be automatically released after being unbound. `False` indicates the EIP will not be automatically released after being unbound.
         * @type {boolean || null}
         */
        this.CascadeRelease = null;

        /**
         * Type of the protocol used in EIP ALG
         * @type {AlgType || null}
         */
        this.EipAlgType = null;

        /**
         * The ISP of an EIP/Elastic IP, with possible return values currently including "CMCC", "CTCC", "CUCC" and "BGP"
         * @type {string || null}
         */
        this.InternetServiceProvider = null;

        /**
         * Whether the EIP is in a local BGP.
         * @type {boolean || null}
         */
        this.LocalBgp = null;

        /**
         * Bandwidth value of EIP. The EIP for the bill-by-CVM account will return `null`.
Note: this field may return `null`, indicating that no valid value was found.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Network billing mode of EIP. The EIP for the bill-by-CVM account will return `null`.
Note: this field may return `null`, indicating that no valid value was found.
Including:
<li><strong>BANDWIDTH_PREPAID_BY_MONTH</strong></li>
<p style="padding-left: 30px;">Prepaid by monthly-subscribed bandwidth.</p>
<li><strong>TRAFFIC_POSTPAID_BY_HOUR</strong></li>
<p style="padding-left: 30px;">Pay-as-you-go billing by hourly traffic.</p>
<li><strong>BANDWIDTH_POSTPAID_BY_HOUR</strong></li>
<p style="padding-left: 30px;">Pay-as-you-go billing by hourly bandwidth.</p>
<li><strong>BANDWIDTH_PACKAGE</strong></li>
<p style="padding-left: 30px;">Bandwidth package.</p>
Note: this field may return `null`, indicating that no valid value was found.
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * List of tags associated with the EIP
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * The expiration time.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DeadlineDate = null;

        /**
         * The type of instance bound with the EIP
Note: this field may return `null`, indicating that no valid value was found.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Static single-line IP network egress
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.Egress = null;

        /**
         * ID of the Anti-DDoS service package. It is returned if the EIP is an Anti-DDoS EIP. 
         * @type {string || null}
         */
        this.AntiDDoSPackageId = null;

        /**
         * Indicates whether the current EIP is auto-renewed. This field is displayed only for EIPs with monthly prepaid bandwidth. Valid values are as follows:
<li>NOTIFY_AND_MANUAL_RENEW: Normal renewal</li><li>NOTIFY_AND_AUTO_RENEW: Automatic renewal</li><li>DISABLE_NOTIFY_AND_MANUAL_RENEW: No renewal upon expiration</li>

         * @type {string || null}
         */
        this.RenewFlag = null;

        /**
         * Indicates the ID of the Bandwidth Package associated with the current public IP. If the public IP is not billed by Bandwidth Package, this field is empty.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * Indicates the unique ID of the VPC to which the traditional EIPv6 belongs.
Note: This field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.UnVpcId = null;

        /**
         * Indicates the unique ID of the CDC.
Note: This field may return 'null', indicating that no valid value was found.
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.AddressName = 'AddressName' in params ? params.AddressName : null;
        this.AddressStatus = 'AddressStatus' in params ? params.AddressStatus : null;
        this.AddressIp = 'AddressIp' in params ? params.AddressIp : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.PrivateAddressIp = 'PrivateAddressIp' in params ? params.PrivateAddressIp : null;
        this.IsArrears = 'IsArrears' in params ? params.IsArrears : null;
        this.IsBlocked = 'IsBlocked' in params ? params.IsBlocked : null;
        this.IsEipDirectConnection = 'IsEipDirectConnection' in params ? params.IsEipDirectConnection : null;
        this.AddressType = 'AddressType' in params ? params.AddressType : null;
        this.CascadeRelease = 'CascadeRelease' in params ? params.CascadeRelease : null;

        if (params.EipAlgType) {
            let obj = new AlgType();
            obj.deserialize(params.EipAlgType)
            this.EipAlgType = obj;
        }
        this.InternetServiceProvider = 'InternetServiceProvider' in params ? params.InternetServiceProvider : null;
        this.LocalBgp = 'LocalBgp' in params ? params.LocalBgp : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.DeadlineDate = 'DeadlineDate' in params ? params.DeadlineDate : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.Egress = 'Egress' in params ? params.Egress : null;
        this.AntiDDoSPackageId = 'AntiDDoSPackageId' in params ? params.AntiDDoSPackageId : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.UnVpcId = 'UnVpcId' in params ? params.UnVpcId : null;
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

    }
}

/**
 * VPN gateway object.
 * @class
 */
class VpnGateway extends  AbstractModel {
    constructor(){
        super();

        /**
         * Gateway instance ID.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Gateway instance name.
         * @type {string || null}
         */
        this.VpnGatewayName = null;

        /**
         * Gateway instance type. Valid values: 'IPSEC', 'SSL', and 'CCN'.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Gateway instance status. 'PENDING': Creating; 'DELETING': Deleting; 'AVAILABLE': Running.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Gateway public IP.
         * @type {string || null}
         */
        this.PublicIpAddress = null;

        /**
         * Gateway renewal type: 'NOTIFY_AND_MANUAL_RENEW': Manual renewal. 'NOTIFY_AND_AUTO_RENEW': Automatic renewal. 'NOT_NOTIFY_AND_NOT_RENEW': No renewal after expiration.
         * @type {string || null}
         */
        this.RenewFlag = null;

        /**
         * Gateway billing type: POSTPAID_BY_HOUR: Postpaid by hour; PREPAID: Prepaid.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Outbound bandwidth of gateway.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Expiration time of the prepaid gateway.
         * @type {string || null}
         */
        this.ExpiredTime = null;

        /**
         * Whether the public IP is blocked.
         * @type {boolean || null}
         */
        this.IsAddressBlocked = null;

        /**
         * Change of billing method. PREPAID_TO_POSTPAID: Monthly subscription prepaid to postpaid by hour.
         * @type {string || null}
         */
        this.NewPurchasePlan = null;

        /**
         * Gateway billing status. PROTECTIVELY_ISOLATED: Instance is isolated; NORMAL: Normal.
         * @type {string || null}
         */
        this.RestrictState = null;

        /**
         * The availability zone, such as `ap-guangzhou-2`
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Gateway bandwidth quota information.
         * @type {Array.<VpnGatewayQuota> || null}
         */
        this.VpnGatewayQuotaSet = null;

        /**
         * Gateway instance version.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * CCN instance ID when the value of Type is CCN.
         * @type {string || null}
         */
        this.NetworkInstanceId = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * Maximum number of connected clients allowed for the SSL VPN gateway.
         * @type {number || null}
         */
        this.MaxConnection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpnGatewayName = 'VpnGatewayName' in params ? params.VpnGatewayName : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.State = 'State' in params ? params.State : null;
        this.PublicIpAddress = 'PublicIpAddress' in params ? params.PublicIpAddress : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.ExpiredTime = 'ExpiredTime' in params ? params.ExpiredTime : null;
        this.IsAddressBlocked = 'IsAddressBlocked' in params ? params.IsAddressBlocked : null;
        this.NewPurchasePlan = 'NewPurchasePlan' in params ? params.NewPurchasePlan : null;
        this.RestrictState = 'RestrictState' in params ? params.RestrictState : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.VpnGatewayQuotaSet) {
            this.VpnGatewayQuotaSet = new Array();
            for (let z in params.VpnGatewayQuotaSet) {
                let obj = new VpnGatewayQuota();
                obj.deserialize(params.VpnGatewayQuotaSet[z]);
                this.VpnGatewayQuotaSet.push(obj);
            }
        }
        this.Version = 'Version' in params ? params.Version : null;
        this.NetworkInstanceId = 'NetworkInstanceId' in params ? params.NetworkInstanceId : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.MaxConnection = 'MaxConnection' in params ? params.MaxConnection : null;

    }
}

/**
 * ModifyAddressesBandwidth request structure.
 * @class
 */
class ModifyAddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of EIP IDs, such as “eip-xxxx”.
         * @type {Array.<string> || null}
         */
        this.AddressIds = null;

        /**
         * Target bandwidth value adjustment
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * (Disused) The start time of the monthly bandwidth subscription
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * (Disused) The end time of the monthly bandwidth subscription
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressIds = 'AddressIds' in params ? params.AddressIds : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * EnableVpcEndPointConnect request structure.
 * @class
 */
class EnableVpcEndPointConnectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * Endpoint ID
         * @type {Array.<string> || null}
         */
        this.EndPointId = null;

        /**
         * Whether to accept the request of connecting with an endpoint

         * @type {boolean || null}
         */
        this.AcceptFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;
        this.AcceptFlag = 'AcceptFlag' in params ? params.AcceptFlag : null;

    }
}

/**
 * EnableGatewayFlowMonitor response structure.
 * @class
 */
class EnableGatewayFlowMonitorResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The structure of information of the bandwidth package.
 * @class
 */
class Resource extends  AbstractModel {
    constructor(){
        super();

        /**
         * The bandwidth package resource type, including `Address`, and `LoadBalance`
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The bandwidth package ID, such as `eip-xxxx` and `lb-xxxx`.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * The bandwidth package resource IP.
         * @type {string || null}
         */
        this.AddressIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.AddressIp = 'AddressIp' in params ? params.AddressIp : null;

    }
}

/**
 * Customer Gateway
 * @class
 */
class CustomerGateway extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the customer gateway
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

        /**
         * Gateway Name
         * @type {string || null}
         */
        this.CustomerGatewayName = null;

        /**
         * Public network address
         * @type {string || null}
         */
        this.IpAddress = null;

        /**
         * The creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;
        this.CustomerGatewayName = 'CustomerGatewayName' in params ? params.CustomerGatewayName : null;
        this.IpAddress = 'IpAddress' in params ? params.IpAddress : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * AllocateAddresses response structure.
 * @class
 */
class AllocateAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of the unique IDs of the requested EIPs.
         * @type {Array.<string> || null}
         */
        this.AddressSet = null;

        /**
         * The Async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressSet = 'AddressSet' in params ? params.AddressSet : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpnConnections response structure.
 * @class
 */
class DescribeVpnConnectionsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * VPN tunnel instance.
         * @type {Array.<VpnConnection> || null}
         */
        this.VpnConnectionSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.VpnConnectionSet) {
            this.VpnConnectionSet = new Array();
            for (let z in params.VpnConnectionSet) {
                let obj = new VpnConnection();
                obj.deserialize(params.VpnConnectionSet[z]);
                this.VpnConnectionSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The structure of information of the bandwidth package.
 * @class
 */
class BandwidthPackage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * Bandwidth package type, includes:
<li>BGP: General BGP bandwidth package</li>
<li>HIGH_QUALITY_BGP: Dedicated BGP bandwidth package</li>
<li>ANYCAST: AIA BGP bandwidth package</li>
<li>SINGLEISP_CMCC: CMCC bandwidth package</li>
<li>SINGLEISP_CTCC: CTCC bandwidth package</li>
<li>SINGLEISP_CUCC: CUCC bandwidth package</li>
         * @type {string || null}
         */
        this.NetworkType = null;

        /**
         * Bandwidth package billing type, includes:
<li>ENHANCED95_POSTPAID_BY_MONTH: Pay-as-you-go - Enhanced 95th percentile</li>
<li>PRIMARY_TRAFFIC_POSTPAID_BY_HOUR: Postpaid - Main Traffic Billing</li>
<li>BANDWIDTH_POSTPAID_BY_DAY: General BGP, Pay-as-you-go - Bandwidth-based</li>
<li>PEAK_BANDWIDTH_POSTPAID_BY_DAY: Static single-line, Pay-as-you-go - Daily billed</li>
<li>TOP5_POSTPAID_BY_MONTH: Pay-as-you-go - Monthly top 5th, If you need to use this Bglling mode, please submit a ticket</li>

         * @type {string || null}
         */
        this.ChargeType = null;

        /**
         * The name of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageName = null;

        /**
         * The creation time of the bandwidth package, which follows the `ISO8601` standard and uses `UTC` time in the format of `YYYY-MM-DDThh:mm:ssZ`.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The status of the bandwidth package. Valid values: 'CREATING', 'CREATED', 'DELETING', and 'DELETED'.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The resource information of the bandwidth package.
         * @type {Array.<Resource> || null}
         */
        this.ResourceSet = null;

        /**
         * The limit of the bandwidth package in Mbps. The value '-1' indicates there is no limit.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Network egress. It defaults to `center_egress1`. Valid values:
center_egress1,center_egress2,center_egress3

         * @type {string || null}
         */
        this.Egress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.NetworkType = 'NetworkType' in params ? params.NetworkType : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.BandwidthPackageName = 'BandwidthPackageName' in params ? params.BandwidthPackageName : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.ResourceSet) {
            this.ResourceSet = new Array();
            for (let z in params.ResourceSet) {
                let obj = new Resource();
                obj.deserialize(params.ResourceSet[z]);
                this.ResourceSet.push(obj);
            }
        }
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;
        this.Egress = 'Egress' in params ? params.Egress : null;

    }
}

/**
 * ModifyVpcAttribute request structure.
 * @class
 */
class ModifyVpcAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID, in the format of vpc-f49l6u0z.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * VPC can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * Whether multicast is enabled. `true`: Enabled. `false`: Off.
         * @type {string || null}
         */
        this.EnableMulticast = null;

        /**
         * DNS address. A maximum of 4 addresses is supported. The first one is primary server by default, and the rest are secondary servers.
         * @type {Array.<string> || null}
         */
        this.DnsServers = null;

        /**
         * Domain name
         * @type {string || null}
         */
        this.DomainName = null;

        /**
         * Vpc association with CCN route publish policy. true enables cidr route publishing. false enables subnet route publishing. the default is subnet route publishing when creating a vpc. to use cidr route publishing, submit a ticket to add to allowlist.
         * @type {boolean || null}
         */
        this.EnableRouteVpcPublish = null;

        /**
         * Whether to publish the CDC subnet to CCN. `true`: Publish; `false`: Do not publish
         * @type {boolean || null}
         */
        this.EnableCdcPublish = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.EnableMulticast = 'EnableMulticast' in params ? params.EnableMulticast : null;
        this.DnsServers = 'DnsServers' in params ? params.DnsServers : null;
        this.DomainName = 'DomainName' in params ? params.DomainName : null;
        this.EnableRouteVpcPublish = 'EnableRouteVpcPublish' in params ? params.EnableRouteVpcPublish : null;
        this.EnableCdcPublish = 'EnableCdcPublish' in params ? params.EnableCdcPublish : null;

    }
}

/**
 * ModifyNatGatewayDestinationIpPortTranslationNatRule request structure.
 * @class
 */
class ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT gateway, such as `nat-df45454`.
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The port forwarding rule of the source NAT gateway.
         * @type {DestinationIpPortTranslationNatRule || null}
         */
        this.SourceNatRule = null;

        /**
         * The port forwarding rule of the destination NAT gateway.
         * @type {DestinationIpPortTranslationNatRule || null}
         */
        this.DestinationNatRule = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;

        if (params.SourceNatRule) {
            let obj = new DestinationIpPortTranslationNatRule();
            obj.deserialize(params.SourceNatRule)
            this.SourceNatRule = obj;
        }

        if (params.DestinationNatRule) {
            let obj = new DestinationIpPortTranslationNatRule();
            obj.deserialize(params.DestinationNatRule)
            this.DestinationNatRule = obj;
        }

    }
}

/**
 * CreateSecurityGroupPolicies request structure.
 * @class
 */
class CreateSecurityGroupPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Security group policy set.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }

    }
}

/**
 * ModifyVpnGatewayRoutes response structure.
 * @class
 */
class ModifyVpnGatewayRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route information of the VPN gateway
Note: this field may return `null`, indicating that no valid value is obtained.
         * @type {Array.<VpnGatewayRoute> || null}
         */
        this.Routes = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpnGatewayRoute();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRouteTableAttribute response structure.
 * @class
 */
class ModifyRouteTableAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyIPv6AddressesBandwidth response structure.
 * @class
 */
class ModifyIPv6AddressesBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroupReferences response structure.
 * @class
 */
class DescribeSecurityGroupReferencesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Referred security groups.
         * @type {Array.<ReferredSecurityGroup> || null}
         */
        this.ReferredSecurityGroupSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ReferredSecurityGroupSet) {
            this.ReferredSecurityGroupSet = new Array();
            for (let z in params.ReferredSecurityGroupSet) {
                let obj = new ReferredSecurityGroup();
                obj.deserialize(params.ReferredSecurityGroupSet[z]);
                this.ReferredSecurityGroupSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisableGatewayFlowMonitor request structure.
 * @class
 */
class DisableGatewayFlowMonitorRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Gateway instance ID. Supported types:
Direct connect gateway instance, such as `dcg-ltjahce6`;
NAT gateway instance, such as `nat-ltjahce6`;
VPN gateway instance, such as `vpn-ltjahce6`.
         * @type {string || null}
         */
        this.GatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;

    }
}

/**
 * CreateAddressTemplateGroup response structure.
 * @class
 */
class CreateAddressTemplateGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group object of the IP address template.
         * @type {AddressTemplateGroup || null}
         */
        this.AddressTemplateGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AddressTemplateGroup) {
            let obj = new AddressTemplateGroup();
            obj.deserialize(params.AddressTemplateGroup)
            this.AddressTemplateGroup = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeBandwidthPackageQuota response structure.
 * @class
 */
class DescribeBandwidthPackageQuotaResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The quota of the bandwidth package.
         * @type {Array.<Quota> || null}
         */
        this.QuotaSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.QuotaSet) {
            this.QuotaSet = new Array();
            for (let z in params.QuotaSet) {
                let obj = new Quota();
                obj.deserialize(params.QuotaSet[z]);
                this.QuotaSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteServiceTemplateGroup request structure.
 * @class
 */
class DeleteServiceTemplateGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The protocol port template group instance ID, such as `ppmg-n17uxvve`.
         * @type {string || null}
         */
        this.ServiceTemplateGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateGroupId = 'ServiceTemplateGroupId' in params ? params.ServiceTemplateGroupId : null;

    }
}

/**
 * DeleteNatGateway response structure.
 * @class
 */
class DeleteNatGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AdjustPublicAddress request structure.
 * @class
 */
class AdjustPublicAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the CVM instance, such as `ins-11112222`.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique ID of the EIP, such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.AddressId = 'AddressId' in params ? params.AddressId : null;

    }
}

/**
 * CreateDirectConnectGateway response structure.
 * @class
 */
class CreateDirectConnectGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The object of the direct connect gateway.
         * @type {DirectConnectGateway || null}
         */
        this.DirectConnectGateway = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DirectConnectGateway) {
            let obj = new DirectConnectGateway();
            obj.deserialize(params.DirectConnectGateway)
            this.DirectConnectGateway = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpcEndPointAttribute request structure.
 * @class
 */
class ModifyVpcEndPointAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint ID
         * @type {string || null}
         */
        this.EndPointId = null;

        /**
         * Endpoint name
         * @type {string || null}
         */
        this.EndPointName = null;

        /**
         * List of security group IDs
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;
        this.EndPointName = 'EndPointName' in params ? params.EndPointName : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * ModifyBandwidthPackageBandwidth request structure.
 * @class
 */
class ModifyBandwidthPackageBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum bandwidth. Unit: Mbps. 
         * @type {number || null}
         */
        this.InternetMaxBandwidth = null;

        /**
         * Bandwidth package ID.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InternetMaxBandwidth = 'InternetMaxBandwidth' in params ? params.InternetMaxBandwidth : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

    }
}

/**
 * DescribeTaskResult response structure.
 * @class
 */
class DescribeTaskResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * The execution results, including `SUCCESS`, `FAILED`, and `RUNNING`
         * @type {string || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateNetworkAclSubnets request structure.
 * @class
 */
class DisassociateNetworkAclSubnetsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Array of subnet instance IDs, such as [subnet-12345678].
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;

    }
}

/**
 * ModifyAddressTemplateGroupAttribute request structure.
 * @class
 */
class ModifyAddressTemplateGroupAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address template group instance ID, such as `ipmg-2uw6ujo6`.
         * @type {string || null}
         */
        this.AddressTemplateGroupId = null;

        /**
         * IP address template group name.
         * @type {string || null}
         */
        this.AddressTemplateGroupName = null;

        /**
         * IP address template instance ID, such as `ipm-mdunqeb6`.
         * @type {Array.<string> || null}
         */
        this.AddressTemplateIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateGroupId = 'AddressTemplateGroupId' in params ? params.AddressTemplateGroupId : null;
        this.AddressTemplateGroupName = 'AddressTemplateGroupName' in params ? params.AddressTemplateGroupName : null;
        this.AddressTemplateIds = 'AddressTemplateIds' in params ? params.AddressTemplateIds : null;

    }
}

/**
 * ModifyServiceTemplateGroupAttribute request structure.
 * @class
 */
class ModifyServiceTemplateGroupAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The protocol port template group instance ID, such as `ppmg-ei8hfd9a`.
         * @type {string || null}
         */
        this.ServiceTemplateGroupId = null;

        /**
         * Protocol port template group name.
         * @type {string || null}
         */
        this.ServiceTemplateGroupName = null;

        /**
         * Instance ID of the protocol port template, such as `ppm-4dw6agho`.
         * @type {Array.<string> || null}
         */
        this.ServiceTemplateIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateGroupId = 'ServiceTemplateGroupId' in params ? params.ServiceTemplateGroupId : null;
        this.ServiceTemplateGroupName = 'ServiceTemplateGroupName' in params ? params.ServiceTemplateGroupName : null;
        this.ServiceTemplateIds = 'ServiceTemplateIds' in params ? params.ServiceTemplateIds : null;

    }
}

/**
 * DeleteVpcEndPoint request structure.
 * @class
 */
class DeleteVpcEndPointRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Endpoint ID
         * @type {string || null}
         */
        this.EndPointId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EndPointId = 'EndPointId' in params ? params.EndPointId : null;

    }
}

/**
 * InquiryPriceAllocateAddresses request structure.
 * @class
 */
class InquiryPriceAllocateAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EIP billing method.

<ul style="margin:0"><li>Users with standard account type. Valid values: <ul>
<li>BANDWIDTH_POSTPAID_BY_HOUR: billed by hourly bandwidth on a pay-as-you-go basis.</li>
<li>BANDWIDTH_PREPAID_BY_MONTH: monthly bandwidth subscription.</li>
<li>TRAFFIC_POSTPAID_BY_HOUR: billed by hourly traffic on a pay-as-you-go basis.</li></ul>Default value: TRAFFIC_POSTPAID_BY_HOUR.</li>
</ul>
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * The EIP outbound bandwidth cap, in Mbps.
<ul style="margin:0"><li>For users with standard account type, the range of optional values depends on the EIP billing method:<ul>
<li>`BANDWIDTH_POSTPAID_BY_HOUR`: 1 Mbps to 100 Mbps.</li>
<li>`BANDWIDTH_PREPAID_BY_MONTH`: 1 Mbps to 200 Mbps</li>
<li>`TRAFFIC_POSTPAID_BY_HOUR`: 1 Mbps to 100 Mbps.</li></ul>Default value: 1 Mbps.</li></ul>
<li>For users with traditional account type, the EIP outbound bandwidth cap is subject to the public network egress bandwidth limit of the bound instance. No need to pass this parameter.</li></ul>
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * A required billing parameter for an EIP billed by "BANDWIDTH_PREPAID_BY_MONTH". When the EIP is billed by "BANDWIDTH_PREPAID_BY_MONTH" this parameter is required. For other scenarios, it can be ignored.
         * @type {AddressChargePrepaid || null}
         */
        this.AddressChargePrepaid = null;

        /**
         * EIP type. Default value: EIP.



<ul style="margin:0"><li>High quality EIP, valid values: <ul><li>HighQualityEIP: high quality EIP</li></ul>Note: High quality EIP is supported only in some regions.</li></ul><ul style="margin:0">
        <li>High-defense IP, valid values: <ul>
                <li>AntiDDoSEIP: high-defense IP</li>
            </ul>
        </li>
    </ul>
         * @type {string || null}
         */
        this.AddressType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

        if (params.AddressChargePrepaid) {
            let obj = new AddressChargePrepaid();
            obj.deserialize(params.AddressChargePrepaid)
            this.AddressChargePrepaid = obj;
        }
        this.AddressType = 'AddressType' in params ? params.AddressType : null;

    }
}

/**
 * The CCN object
 * @class
 */
class CCN extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the CCN
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The name of the CCN
         * @type {string || null}
         */
        this.CcnName = null;

        /**
         * The detailed information of the CCN
         * @type {string || null}
         */
        this.CcnDescription = null;

        /**
         * The number of associated instances
         * @type {number || null}
         */
        this.InstanceCount = null;

        /**
         * The creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * The instance status. 'ISOLATED': Being isolated (instance is in arrears and service is suspended). 'AVAILABLE': Operating.
         * @type {string || null}
         */
        this.State = null;

        /**
         * The instance service quality. ’PT’: Platinum , 'AU': Gold, 'AG': Silver.
         * @type {string || null}
         */
        this.QosLevel = null;

        /**
         * The billing method. POSTPAID indicates postpaid.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * The limit type. INTER_REGION_LIMIT is the limit between regions. OUTER_REGION_LIMIT is a region egress limit.
Note: This field may return null, indicating no valid value.
         * @type {string || null}
         */
        this.BandwidthLimitType = null;

        /**
         * Tag key-value pairs.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Whether the CCN route priority feature is supported. Valid values: False: do not support; True: support.
         * @type {boolean || null}
         */
        this.RoutePriorityFlag = null;

        /**
         * Number of route tables associated with the instance.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RouteTableCount = null;

        /**
         * Whether the multiple route tables feature is enabled for the CCN instance. Valid values: `False`: no; `True`: yes. Default value: `False`.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RouteTableFlag = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.IsSecurityLock = null;

        /**
         * Status of CCN route broadcasting policy. Values: `False` (Disabled), `True` (Enabled)
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RouteBroadcastPolicyFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.CcnName = 'CcnName' in params ? params.CcnName : null;
        this.CcnDescription = 'CcnDescription' in params ? params.CcnDescription : null;
        this.InstanceCount = 'InstanceCount' in params ? params.InstanceCount : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.State = 'State' in params ? params.State : null;
        this.QosLevel = 'QosLevel' in params ? params.QosLevel : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.BandwidthLimitType = 'BandwidthLimitType' in params ? params.BandwidthLimitType : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.RoutePriorityFlag = 'RoutePriorityFlag' in params ? params.RoutePriorityFlag : null;
        this.RouteTableCount = 'RouteTableCount' in params ? params.RouteTableCount : null;
        this.RouteTableFlag = 'RouteTableFlag' in params ? params.RouteTableFlag : null;
        this.IsSecurityLock = 'IsSecurityLock' in params ? params.IsSecurityLock : null;
        this.RouteBroadcastPolicyFlag = 'RouteBroadcastPolicyFlag' in params ? params.RouteBroadcastPolicyFlag : null;

    }
}

/**
 * Network ACL quintuple entry
 * @class
 */
class NetworkAclQuintupleEntry extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol. Valid values: `TCP`, `UDP`, `ICMP`, `ALL`.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Source port. Valid values: all, single port, range. When `Protocol` is `ALL` or `ICMP`, `Port` cannot be specified.
         * @type {string || null}
         */
        this.SourcePort = null;

        /**
         * Source CIDR block.
         * @type {string || null}
         */
        this.SourceCidr = null;

        /**
         * Destination port. Valid values: all, single port, range. When `Protocol` is `ALL` or `ICMP`, `Port` cannot be specified.
         * @type {string || null}
         */
        this.DestinationPort = null;

        /**
         * Destination CIDR block.
         * @type {string || null}
         */
        this.DestinationCidr = null;

        /**
         * Action. Valid values: `ACCEPT` and `DROP`.
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Unique ID of a network ACL entry.
         * @type {string || null}
         */
        this.NetworkAclQuintupleEntryId = null;

        /**
         * Priority. `1` refers to the highest priority.
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Creation time. It’s returned by `DescribeNetworkAclQuintupleEntries`.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Direction of the rule. It’s returned by `DescribeNetworkAclQuintupleEntries`. Valid values: `INGRESS` and `EGRESS`.
         * @type {string || null}
         */
        this.NetworkAclDirection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.SourcePort = 'SourcePort' in params ? params.SourcePort : null;
        this.SourceCidr = 'SourceCidr' in params ? params.SourceCidr : null;
        this.DestinationPort = 'DestinationPort' in params ? params.DestinationPort : null;
        this.DestinationCidr = 'DestinationCidr' in params ? params.DestinationCidr : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.NetworkAclQuintupleEntryId = 'NetworkAclQuintupleEntryId' in params ? params.NetworkAclQuintupleEntryId : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.NetworkAclDirection = 'NetworkAclDirection' in params ? params.NetworkAclDirection : null;

    }
}

/**
 * InquirePriceCreateDirectConnectGateway response structure.
 * @class
 */
class InquirePriceCreateDirectConnectGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Standard access fee for a direct connect gateway
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCost = null;

        /**
         * Actual access fee for a direct connect gateway
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RealTotalCost = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCost = 'TotalCost' in params ? params.TotalCost : null;
        this.RealTotalCost = 'RealTotalCost' in params ? params.RealTotalCost : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AdjustPublicAddress response structure.
 * @class
 */
class AdjustPublicAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveBandwidthPackageResources response structure.
 * @class
 */
class RemoveBandwidthPackageResourcesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The port forwarding rules of the NAT gateway
 * @class
 */
class DestinationIpPortTranslationNatRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network protocol. Valid values: `TCP`, `UDP`.
         * @type {string || null}
         */
        this.IpProtocol = null;

        /**
         * EIP.
         * @type {string || null}
         */
        this.PublicIpAddress = null;

        /**
         * Public network port.
         * @type {number || null}
         */
        this.PublicPort = null;

        /**
         * Private network address.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Private network port.
         * @type {number || null}
         */
        this.PrivatePort = null;

        /**
         * Description of NAT gateway forwarding rules.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IpProtocol = 'IpProtocol' in params ? params.IpProtocol : null;
        this.PublicIpAddress = 'PublicIpAddress' in params ? params.PublicIpAddress : null;
        this.PublicPort = 'PublicPort' in params ? params.PublicPort : null;
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.PrivatePort = 'PrivatePort' in params ? params.PrivatePort : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * CheckNetDetectState response structure.
 * @class
 */
class CheckNetDetectStateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of network detection verification results.
         * @type {Array.<NetDetectIpState> || null}
         */
        this.NetDetectIpStateSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetDetectIpStateSet) {
            this.NetDetectIpStateSet = new Array();
            for (let z in params.NetDetectIpStateSet) {
                let obj = new NetDetectIpState();
                obj.deserialize(params.NetDetectIpStateSet[z]);
                this.NetDetectIpStateSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDefaultVpc request structure.
 * @class
 */
class CreateDefaultVpcRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the availability zone in which the subnet resides. This parameter can be obtained through the [`DescribeZones`](https://intl.cloud.tencent.com/document/product/213/15707?from_cn_redirect=1) API, such as `ap-guangzhou-1`. If it’s not specified, a random availability zone will be used.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Whether to forcibly return a default VPC
         * @type {boolean || null}
         */
        this.Force = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Force = 'Force' in params ? params.Force : null;

    }
}

/**
 * DescribeSubnets response structure.
 * @class
 */
class DescribeSubnetsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Subnet object.
         * @type {Array.<Subnet> || null}
         */
        this.SubnetSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SubnetSet) {
            this.SubnetSet = new Array();
            for (let z in params.SubnetSet) {
                let obj = new Subnet();
                obj.deserialize(params.SubnetSet[z]);
                this.SubnetSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCustomerGateways response structure.
 * @class
 */
class DescribeCustomerGatewaysResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Customer gateway object list
         * @type {Array.<CustomerGateway> || null}
         */
        this.CustomerGatewaySet = null;

        /**
         * Number of eligible instances
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CustomerGatewaySet) {
            this.CustomerGatewaySet = new Array();
            for (let z in params.CustomerGatewaySet) {
                let obj = new CustomerGateway();
                obj.deserialize(params.CustomerGatewaySet[z]);
                this.CustomerGatewaySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CheckAssistantCidr response structure.
 * @class
 */
class CheckAssistantCidrResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of conflict resources.
         * @type {Array.<ConflictSource> || null}
         */
        this.ConflictSourceSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ConflictSourceSet) {
            this.ConflictSourceSet = new Array();
            for (let z in params.ConflictSourceSet) {
                let obj = new ConflictSource();
                obj.deserialize(params.ConflictSourceSet[z]);
                this.ConflictSourceSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcTaskResult response structure.
 * @class
 */
class DescribeVpcTaskResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The execution results of an async task. Valid values: `SUCCESS`(task executed successfully), `FAILED` (task execution failed), and `RUNNING` (task in progress). 
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Output of the async task execution result
         * @type {string || null}
         */
        this.Output = null;

        /**
         * Detailed result of an async task, such as the result of batch deleting ENIs.
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<VpcTaskResultDetailInfo> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Output = 'Output' in params ? params.Output : null;

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new VpcTaskResultDetailInfo();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InquiryPriceRenewVpnGateway request structure.
 * @class
 */
class InquiryPriceRenewVpnGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Specifies the purchased validity period, whether to enable auto-renewal. This parameter is required for monthly-subscription instances.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }

    }
}

/**
 * EnableCcnRoutes response structure.
 * @class
 */
class EnableCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyVpnGatewayCcnRoutes response structure.
 * @class
 */
class ModifyVpnGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachCcnInstances response structure.
 * @class
 */
class DetachCcnInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyServiceTemplateGroupAttribute response structure.
 * @class
 */
class ModifyServiceTemplateGroupAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetworkAclQuintupleEntries request structure.
 * @class
 */
class DeleteNetworkAclQuintupleEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL instance ID, such as `acl-12345678`.
         * @type {string || null}
         */
        this.NetworkAclId = null;

        /**
         * Network ACL quintuple rule set.
         * @type {NetworkAclQuintupleEntries || null}
         */
        this.NetworkAclQuintupleSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkAclId = 'NetworkAclId' in params ? params.NetworkAclId : null;

        if (params.NetworkAclQuintupleSet) {
            let obj = new NetworkAclQuintupleEntries();
            obj.deserialize(params.NetworkAclQuintupleSet)
            this.NetworkAclQuintupleSet = obj;
        }

    }
}

/**
 * DeleteSubnet request structure.
 * @class
 */
class DeleteSubnetRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the subnet instance. You can obtain the parameter value from the SubnetId field in the returned result of DescribeSubnets API.
         * @type {string || null}
         */
        this.SubnetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

    }
}

/**
 * DescribeAddressTemplateGroups request structure.
 * @class
 */
class DescribeAddressTemplateGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter conditions.
<li>address-template-group-name - String - (Filter condition) IP address template group name.</li>
<li>address-template-group-id - String - (Filter condition) IP address template group instance ID, such as `ipmg-mdunqeb6`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. The default value is 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of values to be returned. The default value is 20. Maximum is 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteRoutePolicy request structure.
 * @class
 */
class DeleteRoutePolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the unique ID of the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;

    }
}

/**
 * DisassociateVpcEndPointSecurityGroups response structure.
 * @class
 */
class DisassociateVpcEndPointSecurityGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSnapshotPolicies response structure.
 * @class
 */
class DeleteSnapshotPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssociateNatGatewayAddress response structure.
 * @class
 */
class AssociateNatGatewayAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveBandwidthPackageResources request structure.
 * @class
 */
class RemoveBandwidthPackageResourcesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the bandwidth package, such as `bwp-xxxx`.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * The resource type. Valid values: `Address` and `LoadBalance`.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The resource IP, such as `eip-xxxx` and `lb-xxxx`.
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;

    }
}

/**
 * Information on VPN gateway-based CCN routes.
 * @class
 */
class VpngwCcnRoutes extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route ID
         * @type {string || null}
         */
        this.RouteId = null;

        /**
         * Enable the route or not
ENABLE: enable the route
DISABLE: do not enable the route
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Route CIDR block
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;

    }
}

/**
 * Route table object
 * @class
 */
class RouteTable extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Route table name.
         * @type {string || null}
         */
        this.RouteTableName = null;

        /**
         * The association relationships of the route table.
         * @type {Array.<RouteTableAssociation> || null}
         */
        this.AssociationSet = null;

        /**
         * IPv4 routing policy set.
         * @type {Array.<Route> || null}
         */
        this.RouteSet = null;

        /**
         * Whether it is the default route table.
         * @type {boolean || null}
         */
        this.Main = null;

        /**
         * Creation Time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Tag key-value pairs.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Whether the local route is published to CCN.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<CidrForCcn> || null}
         */
        this.LocalCidrForCcn = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteTableName = 'RouteTableName' in params ? params.RouteTableName : null;

        if (params.AssociationSet) {
            this.AssociationSet = new Array();
            for (let z in params.AssociationSet) {
                let obj = new RouteTableAssociation();
                obj.deserialize(params.AssociationSet[z]);
                this.AssociationSet.push(obj);
            }
        }

        if (params.RouteSet) {
            this.RouteSet = new Array();
            for (let z in params.RouteSet) {
                let obj = new Route();
                obj.deserialize(params.RouteSet[z]);
                this.RouteSet.push(obj);
            }
        }
        this.Main = 'Main' in params ? params.Main : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

        if (params.LocalCidrForCcn) {
            this.LocalCidrForCcn = new Array();
            for (let z in params.LocalCidrForCcn) {
                let obj = new CidrForCcn();
                obj.deserialize(params.LocalCidrForCcn[z]);
                this.LocalCidrForCcn.push(obj);
            }
        }

    }
}

/**
 * DeleteNetworkInterface request structure.
 * @class
 */
class DeleteNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

    }
}

/**
 * InquiryPriceResetVpnGatewayInternetMaxBandwidth response structure.
 * @class
 */
class InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Product price.
         * @type {Price || null}
         */
        this.Price = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Price) {
            let obj = new Price();
            obj.deserialize(params.Price)
            this.Price = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeVpcEndPointServiceWhiteList request structure.
 * @class
 */
class DescribeVpcEndPointServiceWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of results per page; default value: 20; maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter condition
<li> user-uin - String - (Filter condition) UIN.</li>
<li> end-point-service-id - String - (Filter condition) Endpoint service ID.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DeleteAddressTemplateGroup response structure.
 * @class
 */
class DeleteAddressTemplateGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ReplaceRoutes response structure.
 * @class
 */
class ReplaceRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Old routing policy
         * @type {Array.<Route> || null}
         */
        this.OldRouteSet = null;

        /**
         * New routing policy
         * @type {Array.<Route> || null}
         */
        this.NewRouteSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.OldRouteSet) {
            this.OldRouteSet = new Array();
            for (let z in params.OldRouteSet) {
                let obj = new Route();
                obj.deserialize(params.OldRouteSet[z]);
                this.OldRouteSet.push(obj);
            }
        }

        if (params.NewRouteSet) {
            this.NewRouteSet = new Array();
            for (let z in params.NewRouteSet) {
                let obj = new Route();
                obj.deserialize(params.NewRouteSet[z]);
                this.NewRouteSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyLocalGateway request structure.
 * @class
 */
class ModifyLocalGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local gateway name
         * @type {string || null}
         */
        this.LocalGatewayName = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * Local gateway instance ID
         * @type {string || null}
         */
        this.LocalGatewayId = null;

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocalGatewayName = 'LocalGatewayName' in params ? params.LocalGatewayName : null;
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.LocalGatewayId = 'LocalGatewayId' in params ? params.LocalGatewayId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;

    }
}

/**
 * The object of the CCN route (IDC IP range) of the Direct Connect gateway
 * @class
 */
class DirectConnectGatewayCcnRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route ID.
         * @type {string || null}
         */
        this.RouteId = null;

        /**
         * IDC IP range.
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

        /**
         * The `AS-Path` attribute of `BGP`.
         * @type {Array.<string> || null}
         */
        this.ASPath = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Last updated time
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;
        this.ASPath = 'ASPath' in params ? params.ASPath : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * DeleteHaVip request structure.
 * @class
 */
class DeleteHaVipRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the `HAVIP`, such as `havip-9o233uri`.
         * @type {string || null}
         */
        this.HaVipId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipId = 'HaVipId' in params ? params.HaVipId : null;

    }
}

/**
 * CreateLocalGateway response structure.
 * @class
 */
class CreateLocalGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Local gateway information
         * @type {LocalGateway || null}
         */
        this.LocalGateway = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LocalGateway) {
            let obj = new LocalGateway();
            obj.deserialize(params.LocalGateway)
            this.LocalGateway = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Protocol port template information
 * @class
 */
class ServicesInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Remarks
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Service = 'Service' in params ? params.Service : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * MigratePrivateIpAddress request structure.
 * @class
 */
class MigratePrivateIpAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the ENI instance bound with the private IP, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.SourceNetworkInterfaceId = null;

        /**
         * ID of the destination ENI instance to be migrated.
         * @type {string || null}
         */
        this.DestinationNetworkInterfaceId = null;

        /**
         * The private IP to be migrated, such as 10.0.0.6.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SourceNetworkInterfaceId = 'SourceNetworkInterfaceId' in params ? params.SourceNetworkInterfaceId : null;
        this.DestinationNetworkInterfaceId = 'DestinationNetworkInterfaceId' in params ? params.DestinationNetworkInterfaceId : null;
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;

    }
}

/**
 * DescribeServiceTemplates request structure.
 * @class
 */
class DescribeServiceTemplatesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filters
<li>service-template-name - Protocol port template name.</li>
<li>service-template-id - Protocol port template ID, such as `ppm-e6dy460g`.</li>
<li>service-port-Protocol port.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. The default value is 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of values to be returned. The default value is 20. Maximum is 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeSnapshotAttachedInstances response structure.
 * @class
 */
class DescribeSnapshotAttachedInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of instances
         * @type {Array.<SnapshotInstance> || null}
         */
        this.InstanceSet = null;

        /**
         * The number of eligible objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceSet) {
            this.InstanceSet = new Array();
            for (let z in params.InstanceSet) {
                let obj = new SnapshotInstance();
                obj.deserialize(params.InstanceSet[z]);
                this.InstanceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RefreshDirectConnectGatewayRouteToNatGateway response structure.
 * @class
 */
class RefreshDirectConnectGatewayRouteToNatGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * IDC subnet information
         * @type {Array.<DirectConnectSubnet> || null}
         */
        this.DirectConnectSubnetSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.DirectConnectSubnetSet) {
            this.DirectConnectSubnetSet = new Array();
            for (let z in params.DirectConnectSubnetSet) {
                let obj = new DirectConnectSubnet();
                obj.deserialize(params.DirectConnectSubnetSet[z]);
                this.DirectConnectSubnetSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteReserveIpAddresses response structure.
 * @class
 */
class DeleteReserveIpAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRouteTable request structure.
 * @class
 */
class DeleteRouteTableRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The route table instance ID, such as `rtb-azd4dt1c`.
         * @type {string || null}
         */
        this.RouteTableId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

    }
}

/**
 * Information of instance associated with the snapshot policy
 * @class
 */
class SnapshotInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Type of associated resource. Values: `securitygroup`
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance region
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * The instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

    }
}

/**
 * CreateVpnGateway request structure.
 * @class
 */
class CreateVpnGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID, which can be obtained from the `VpcId` field in the response of the [`DescribeVpcs`](https://intl.cloud.tencent.com/document/product/215/15778?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The VPN gateway name. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.VpnGatewayName = null;

        /**
         * The public network bandwidth configuration. Available bandwidth specifications: 5, 10, 20, 50, and 100. Unit: Mbps
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * The VPN gateway billing mode. PREPAID: prepaid means monthly subscription. POSTPAID_BY_HOUR: postpaid means pay-as-you-go. Default: POSTPAID_BY_HOUR. If prepaid mode is specified, the `InstanceChargePrepaid` parameter must be entered.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Parameter settings for prepaid billing mode, also known as monthly subscription. This parameter can specify the purchase period and other attributes such as auto-renewal. This parameter is mandatory for prepaid instances.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * The availability zone, such as `ap-guangzhou-2`.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * VPN gateway type. Values: `CCN` (CCN VPN gateway), `SSL` (SSL VPN gateway)
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * CDC instance ID
         * @type {string || null}
         */
        this.CdcId = null;

        /**
         * Maximum number of connected clients allowed for the SSL VPN gateway. Valid values: [5, 10, 20, 50, 100]. This parameter is only required for SSL VPN gateways.
         * @type {number || null}
         */
        this.MaxConnection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.VpnGatewayName = 'VpnGatewayName' in params ? params.VpnGatewayName : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.CdcId = 'CdcId' in params ? params.CdcId : null;
        this.MaxConnection = 'MaxConnection' in params ? params.MaxConnection : null;

    }
}

/**
 * DescribeVpcInstances request structure.
 * @class
 */
class DescribeVpcInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter condition. `RouteTableIds` and `Filters` cannot be specified at the same time.
<li>vpc-id - String - (Filter condition) VPC instance ID, such as `vpc-f49l6u0z`.</li>
<li>instance-type - String - (Filter condition) CVM instance ID.</li>
<li>instance-name - String - (Filter condition) CVM name.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of requested objects.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DeleteVpcEndPointServiceWhiteList response structure.
 * @class
 */
class DeleteVpcEndPointServiceWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSgSnapshotFileContent request structure.
 * @class
 */
class DescribeSgSnapshotFileContentRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Snapshot file ID
         * @type {string || null}
         */
        this.SnapshotFileId = null;

        /**
         * Security group ID
         * @type {string || null}
         */
        this.SecurityGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.SnapshotFileId = 'SnapshotFileId' in params ? params.SnapshotFileId : null;
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

    }
}

/**
 * CreateBandwidthPackage response structure.
 * @class
 */
class CreateBandwidthPackageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the bandwidth package.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * The unique ID list of the bandwidth package (effective only when you apply for more than 1 bandwidth packages).
         * @type {Array.<string> || null}
         */
        this.BandwidthPackageIds = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.BandwidthPackageIds = 'BandwidthPackageIds' in params ? params.BandwidthPackageIds : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResetVpnConnection request structure.
 * @class
 */
class ResetVpnConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The ID of the VPN tunnel instance, such as `vpnx-f49l6u0z`.
         * @type {string || null}
         */
        this.VpnConnectionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.VpnConnectionId = 'VpnConnectionId' in params ? params.VpnConnectionId : null;

    }
}

/**
 * ReleaseAddresses response structure.
 * @class
 */
class ReleaseAddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AuditCrossBorderCompliance response structure.
 * @class
 */
class AuditCrossBorderComplianceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InquiryPriceResetVpnGatewayInternetMaxBandwidth request structure.
 * @class
 */
class InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the VPN gateway instance.
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The public network bandwidth configuration. Available bandwidth specifications: 5, 10, 20, 50, and 100. Unit: Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;

    }
}

/**
 * DisableFlowLogs request structure.
 * @class
 */
class DisableFlowLogsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow log ID.
         * @type {Array.<string> || null}
         */
        this.FlowLogIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowLogIds = 'FlowLogIds' in params ? params.FlowLogIds : null;

    }
}

/**
 * ReplaceSecurityGroupPolicy response structure.
 * @class
 */
class ReplaceSecurityGroupPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EnableGatewayFlowMonitor request structure.
 * @class
 */
class EnableGatewayFlowMonitorRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Gateway instance ID. Supported types:
Direct connect gateway instance, such as `dcg-ltjahce6`;
NAT gateway instance, such as `nat-ltjahce6`;
VPN gateway instance, such as `vpn-ltjahce6`.
         * @type {string || null}
         */
        this.GatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;

    }
}

/**
 * ModifyPrivateIpAddressesAttribute response structure.
 * @class
 */
class ModifyPrivateIpAddressesAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyHaVipAttribute response structure.
 * @class
 */
class ModifyHaVipAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The information of the cross-region bandwidth limit for CCN instances.
 * @class
 */
class CcnBandwidthInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN ID that the bandwidth belongs to.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.CcnId = null;

        /**
         * The creation time of the instance.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * The expiration time of the instance.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.ExpiredTime = null;

        /**
         * The unique ID of the bandwidth instance.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RegionFlowControlId = null;

        /**
         * The billing flag.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.RenewFlag = null;

        /**
         * The information of the bandwidth regions and bandwidth caps. The parameter is only returned for the cross-region limit mode, but not for egress limit.
Note: this field may return null, indicating that no valid value was found.
         * @type {CcnRegionBandwidthLimit || null}
         */
        this.CcnRegionBandwidthLimit = null;

        /**
         * Cloud marketplace instance ID.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MarketId = null;

        /**
         * The list of tags to be bound.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.ExpiredTime = 'ExpiredTime' in params ? params.ExpiredTime : null;
        this.RegionFlowControlId = 'RegionFlowControlId' in params ? params.RegionFlowControlId : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

        if (params.CcnRegionBandwidthLimit) {
            let obj = new CcnRegionBandwidthLimit();
            obj.deserialize(params.CcnRegionBandwidthLimit)
            this.CcnRegionBandwidthLimit = obj;
        }
        this.MarketId = 'MarketId' in params ? params.MarketId : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

    }
}

/**
 * DeleteSecurityGroup response structure.
 * @class
 */
class DeleteSecurityGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeReserveIpAddresses request structure.
 * @class
 */
class DescribeReserveIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique IDs of reserved private IP addresses.
         * @type {Array.<string> || null}
         */
        this.ReserveIpIds = null;

        /**
         * Filter criteria. ReserveIpIds and Filters cannot be specified at the same time.

reserve-ip-id - String - (Filter criteria) Unique ID of a reserved private IP address, for example, rsvip-pvqgv9vi.
vpc-id - String - (Filter criteria) VPC instance ID, for example, vpc-f49l6u0z.
subnet-id - String - (Filter criteria) Subnet instance ID, for example, subnet-f49l6u0z.
address-ip - String - (Filter criteria) Reserved private IP address, for example, 192.168.0.10.
ip-type - String - (Filter criteria) Business type (IpType), for example, 0.
name - String - (Filter criteria) Name.
state - String - (Filter criteria) Status. Valid values: Bind and UnBind.
resource-id - String - (Filter criteria) Bound instance resource, for example, eni-059qmnif.
tag-key - String - (Filter criteria) Tag key.
tag:tag-key - String - (Filter criteria) Tag key-value pair. Replace tag-key with the specific tag key.

         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of request objects.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReserveIpIds = 'ReserveIpIds' in params ? params.ReserveIpIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeAddressQuota request structure.
 * @class
 */
class DescribeAddressQuotaRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Modify attributes of a scheduled snapshot policy
 * @class
 */
class BatchModifySnapshotPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy IDs
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * Snapshot policy name
         * @type {string || null}
         */
        this.SnapshotPolicyName = null;

        /**
         * Backup policy
         * @type {Array.<BackupPolicy> || null}
         */
        this.BackupPolicies = null;

        /**
         * Snapshot retention period. Range: 1 to 365 days
         * @type {number || null}
         */
        this.KeepTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.SnapshotPolicyName = 'SnapshotPolicyName' in params ? params.SnapshotPolicyName : null;

        if (params.BackupPolicies) {
            this.BackupPolicies = new Array();
            for (let z in params.BackupPolicies) {
                let obj = new BackupPolicy();
                obj.deserialize(params.BackupPolicies[z]);
                this.BackupPolicies.push(obj);
            }
        }
        this.KeepTime = 'KeepTime' in params ? params.KeepTime : null;

    }
}

/**
 * AssignIpv6Addresses response structure.
 * @class
 */
class AssignIpv6AddressesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of `IPv6` addresses assigned to ENIs.
         * @type {Array.<Ipv6Address> || null}
         */
        this.Ipv6AddressSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ipv6AddressSet) {
            this.Ipv6AddressSet = new Array();
            for (let z in params.Ipv6AddressSet) {
                let obj = new Ipv6Address();
                obj.deserialize(params.Ipv6AddressSet[z]);
                this.Ipv6AddressSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRoutes response structure.
 * @class
 */
class CreateRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of newly added instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Route table object.
         * @type {Array.<RouteTable> || null}
         */
        this.RouteTableSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RouteTableSet) {
            this.RouteTableSet = new Array();
            for (let z in params.RouteTableSet) {
                let obj = new RouteTable();
                obj.deserialize(params.RouteTableSet[z]);
                this.RouteTableSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSecurityGroups response structure.
 * @class
 */
class DescribeSecurityGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group object.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<SecurityGroup> || null}
         */
        this.SecurityGroupSet = null;

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityGroupSet) {
            this.SecurityGroupSet = new Array();
            for (let z in params.SecurityGroupSet) {
                let obj = new SecurityGroup();
                obj.deserialize(params.SecurityGroupSet[z]);
                this.SecurityGroupSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateVpcEndPointServiceWhiteList request structure.
 * @class
 */
class CreateVpcEndPointServiceWhiteListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * UIN
         * @type {string || null}
         */
        this.UserUin = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

        /**
         * Allowlist description
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserUin = 'UserUin' in params ? params.UserUin : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * DeleteNatGatewaySourceIpTranslationNatRule request structure.
 * @class
 */
class DeleteNatGatewaySourceIpTranslationNatRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the NAT Gateway, such as `nat-df45454`
         * @type {string || null}
         */
        this.NatGatewayId = null;

        /**
         * The list of SNAT rule IDs of a NAT Gateway, such as `snat-df43254`
         * @type {Array.<string> || null}
         */
        this.NatGatewaySnatIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NatGatewayId = 'NatGatewayId' in params ? params.NatGatewayId : null;
        this.NatGatewaySnatIds = 'NatGatewaySnatIds' in params ? params.NatGatewaySnatIds : null;

    }
}

/**
 * ModifyVpnGatewayCcnRoutes request structure.
 * @class
 */
class ModifyVpnGatewayCcnRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the VPN gateway
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * The CCN route (IDC IP range) list.
         * @type {Array.<VpngwCcnRoutes> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new VpngwCcnRoutes();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * DescribeGatewayFlowQos request structure.
 * @class
 */
class DescribeGatewayFlowQosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Gateway instance ID. Supported types:
Direct connect gateway instance, such as `dcg-ltjahce6`;
NAT gateway instance, such as `nat-ltjahce6`;
VPN gateway instance, such as `vpn-ltjahce6`.
         * @type {string || null}
         */
        this.GatewayId = null;

        /**
         * CVM private IP addresses with limited bandwidth.
         * @type {Array.<string> || null}
         */
        this.IpAddresses = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;
        this.IpAddresses = 'IpAddresses' in params ? params.IpAddresses : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ReplaceDirectConnectGatewayCcnRoutes response structure.
 * @class
 */
class ReplaceDirectConnectGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DownloadCustomerGatewayConfiguration response structure.
 * @class
 */
class DownloadCustomerGatewayConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration information in XML format.
         * @type {string || null}
         */
        this.CustomerGatewayConfiguration = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayConfiguration = 'CustomerGatewayConfiguration' in params ? params.CustomerGatewayConfiguration : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifySecurityGroupPolicies response structure.
 * @class
 */
class ModifySecurityGroupPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Protocol port template
 * @class
 */
class ServiceTemplateSpecification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port ID, such as `ppm-f5n1f8da`.
         * @type {string || null}
         */
        this.ServiceId = null;

        /**
         * Protocol port group ID, such as `ppmg-f5n1f8da`.
         * @type {string || null}
         */
        this.ServiceGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceId = 'ServiceId' in params ? params.ServiceId : null;
        this.ServiceGroupId = 'ServiceGroupId' in params ? params.ServiceGroupId : null;

    }
}

/**
 * DetachNetworkInterface request structure.
 * @class
 */
class DetachNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The ID of the CVM instance, such as `ins-r8hr2upy`.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyIPv6AddressesAttributes request structure.
 * @class
 */
class ModifyIPv6AddressesAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of unique IDs of EIPv6.
         * @type {Array.<string> || null}
         */
        this.IPv6AddressIds = null;

        /**
         * Name of the EIPv6 address
         * @type {string || null}
         */
        this.IPv6AddressName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IPv6AddressIds = 'IPv6AddressIds' in params ? params.IPv6AddressIds : null;
        this.IPv6AddressName = 'IPv6AddressName' in params ? params.IPv6AddressName : null;

    }
}

/**
 * Reserved private IP address data.
 * @class
 */
class ReserveIpAddressInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the reserved private IP address.
         * @type {string || null}
         */
        this.ReserveIpId = null;

        /**
         * Unique ID of the VPC.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unique ID of the subnet.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Reserved private IP address.
         * @type {string || null}
         */
        this.ReserveIpAddress = null;

        /**
         * Resource instance ID bound to the reserved private IP address.
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * IpType applied for the product.
         * @type {number || null}
         */
        this.IpType = null;

        /**
         * Binding status. UnBind: unbound; Bind: bound.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Name of the reserved private IP address.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description of the reserved private IP address.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Tag key-value pair.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReserveIpId = 'ReserveIpId' in params ? params.ReserveIpId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.ReserveIpAddress = 'ReserveIpAddress' in params ? params.ReserveIpAddress : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.IpType = 'IpType' in params ? params.IpType : null;
        this.State = 'State' in params ? params.State : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }

    }
}

/**
 * AttachClassicLinkVpc response structure.
 * @class
 */
class AttachClassicLinkVpcResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateAddressTemplate request structure.
 * @class
 */
class CreateAddressTemplateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address template name.
         * @type {string || null}
         */
        this.AddressTemplateName = null;

        /**
         * The address information can be presented by the IP, CIDR block or IP address range. Either Addresses or AddressesExtra is required.
         * @type {Array.<string> || null}
         */
        this.Addresses = null;

        /**
         * The address information can contain remarks and be presented by the IP, CIDR block or IP address range. Either Addresses or AddressesExtra is required.
         * @type {Array.<AddressInfo> || null}
         */
        this.AddressesExtra = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressTemplateName = 'AddressTemplateName' in params ? params.AddressTemplateName : null;
        this.Addresses = 'Addresses' in params ? params.Addresses : null;

        if (params.AddressesExtra) {
            this.AddressesExtra = new Array();
            for (let z in params.AddressesExtra) {
                let obj = new AddressInfo();
                obj.deserialize(params.AddressesExtra[z]);
                this.AddressesExtra.push(obj);
            }
        }

    }
}

/**
 * DescribeNatGateways response structure.
 * @class
 */
class DescribeNatGatewaysResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * NAT gateway object array.
         * @type {Array.<NatGateway> || null}
         */
        this.NatGatewaySet = null;

        /**
         * The number of eligible NAT gateway objects.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NatGatewaySet) {
            this.NatGatewaySet = new Array();
            for (let z in params.NatGatewaySet) {
                let obj = new NatGateway();
                obj.deserialize(params.NatGatewaySet[z]);
                this.NatGatewaySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Query the returned object of a NAT route
 * @class
 */
class NatDirectConnectGatewayRoute extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `IPv4` `CIDR` of the subnet.
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

        /**
         * The type of the next-hop gateway. Supported types:
`DIRECTCONNECT`: Direct connect gateway
         * @type {string || null}
         */
        this.GatewayType = null;

        /**
         * ID of the next-hop gateway
         * @type {string || null}
         */
        this.GatewayId = null;

        /**
         * The creation time of the route
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * The update time of the route
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;
        this.GatewayType = 'GatewayType' in params ? params.GatewayType : null;
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * Network ACL quintuple
 * @class
 */
class NetworkAclQuintupleEntries extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network ACL quintuple inbound rule.
         * @type {Array.<NetworkAclQuintupleEntry> || null}
         */
        this.Ingress = null;

        /**
         * Network ACL quintuple outbound rule.
         * @type {Array.<NetworkAclQuintupleEntry> || null}
         */
        this.Egress = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Ingress) {
            this.Ingress = new Array();
            for (let z in params.Ingress) {
                let obj = new NetworkAclQuintupleEntry();
                obj.deserialize(params.Ingress[z]);
                this.Ingress.push(obj);
            }
        }

        if (params.Egress) {
            this.Egress = new Array();
            for (let z in params.Egress) {
                let obj = new NetworkAclQuintupleEntry();
                obj.deserialize(params.Egress[z]);
                this.Egress.push(obj);
            }
        }

    }
}

/**
 * AttachNetworkInterface request structure.
 * @class
 */
class AttachNetworkInterfaceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The ID of the CVM instance, such as `ins-r8hr2upy`.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ENI mounting type. Valid values: `0` (standard); `1` (extension); default value: `0`
         * @type {number || null}
         */
        this.AttachType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.AttachType = 'AttachType' in params ? params.AttachType : null;

    }
}

/**
 * DescribeCcnRoutes response structure.
 * @class
 */
class DescribeCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The CCN routing policy object.
         * @type {Array.<CcnRoute> || null}
         */
        this.RouteSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RouteSet) {
            this.RouteSet = new Array();
            for (let z in params.RouteSet) {
                let obj = new CcnRoute();
                obj.deserialize(params.RouteSet[z]);
                this.RouteSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AllocateIp6AddressesBandwidth request structure.
 * @class
 */
class AllocateIp6AddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IPv6 addresses that require the public network access capability.
         * @type {Array.<string> || null}
         */
        this.Ip6Addresses = null;

        /**
         * Bandwidth, in Mbps. The default value is 1 Mbps.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Network billing mode. IPv6 addresses currently support "TRAFFIC_POSTPAID_BY_HOUR" and "BANDWIDTH_PACKAGE". The default network billing mode is "TRAFFIC_POSTPAID_BY_HOUR".
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * Bandwidth package ID. This ID is required for standard accounts to add the IPv6 addresses to the bandwidth package, thus using the billing mode.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * List of tags to be associated.		
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip6Addresses = 'Ip6Addresses' in params ? params.Ip6Addresses : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * Security group object
 * @class
 */
class SecurityGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-ohuuioma`.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

        /**
         * Security group can be named freely, but cannot exceed 60 characters.
         * @type {string || null}
         */
        this.SecurityGroupName = null;

        /**
         * The remarks for the security group. The maximum length is 100 characters.
         * @type {string || null}
         */
        this.SecurityGroupDesc = null;

        /**
         * The project id is 0 by default. You can query this in the project management page of the Qcloud console.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Whether it is the default security group (which cannot be deleted).
         * @type {boolean || null}
         */
        this.IsDefault = null;

        /**
         * Security group creation time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Tag key-value pairs.
         * @type {Array.<Tag> || null}
         */
        this.TagSet = null;

        /**
         * Security group update time.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;
        this.SecurityGroupName = 'SecurityGroupName' in params ? params.SecurityGroupName : null;
        this.SecurityGroupDesc = 'SecurityGroupDesc' in params ? params.SecurityGroupDesc : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.TagSet) {
            this.TagSet = new Array();
            for (let z in params.TagSet) {
                let obj = new Tag();
                obj.deserialize(params.TagSet[z]);
                this.TagSet.push(obj);
            }
        }
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;

    }
}

/**
 * DisableGatewayFlowMonitor response structure.
 * @class
 */
class DisableGatewayFlowMonitorResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisassociateAddress response structure.
 * @class
 */
class DisassociateAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The async task ID. You can use the [DescribeTaskResult](https://intl.cloud.tencent.com/document/api/215/36271?from_cn_redirect=1) API to query the task status.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * IDC subnet information
 * @class
 */
class DirectConnectSubnet extends  AbstractModel {
    constructor(){
        super();

        /**
         * The direct connect gateway ID.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

        /**
         * IDC subnet IP range
         * @type {string || null}
         */
        this.CidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;

    }
}

/**
 * DescribeVpnGatewayRoutes request structure.
 * @class
 */
class DescribeVpnGatewayRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the VPN gateway
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * Filter condition. Valid values: `DestinationCidr`, `InstanceId`, and `InstanceType`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results per page. Default value: 20; maximum value: 100
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * GetCcnRegionBandwidthLimits response structure.
 * @class
 */
class GetCcnRegionBandwidthLimitsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The outbound bandwidth limits of regions in a CCN instance.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CcnBandwidthInfo> || null}
         */
        this.CcnBandwidthSet = null;

        /**
         * The number of eligible objects.
Note: this field may return null, indicating that no valid value was found.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CcnBandwidthSet) {
            this.CcnBandwidthSet = new Array();
            for (let z in params.CcnBandwidthSet) {
                let obj = new CcnBandwidthInfo();
                obj.deserialize(params.CcnBandwidthSet[z]);
                this.CcnBandwidthSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRoutes request structure.
 * @class
 */
class DeleteRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route table instance ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Routing policy object. Only the `RouteId` field is required when deleting a routing policy.
         * @type {Array.<Route> || null}
         */
        this.Routes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;

        if (params.Routes) {
            this.Routes = new Array();
            for (let z in params.Routes) {
                let obj = new Route();
                obj.deserialize(params.Routes[z]);
                this.Routes.push(obj);
            }
        }

    }
}

/**
 * AssociateAddress request structure.
 * @class
 */
class AssociateAddressRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the EIP, such as `eip-11112222`.
         * @type {string || null}
         */
        this.AddressId = null;

        /**
         * The ID of the instance to be bound, such as `ins-11112222`, `lb-11112222`. You can query the instance ID by logging into the [Console](https://console.cloud.tencent.com/cvm). You can also obtain the parameter value from the `InstanceId` field in the returned result of [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The ID of the ENI to be bonud, such as `eni-11112222`. `NetworkInterfaceId` and `InstanceId` cannot be specified at the same time. You can query the ENI ID by logging into the [Console](https://console.cloud.tencent.com/vpc/eni). You can also obtain the parameter value from the `networkInterfaceId` field in the returned result of [DescribeNetworkInterfaces](https://intl.cloud.tencent.com/document/api/215/15817?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The private IP to be bound. If you specify `NetworkInterfaceId`, then you must also specify `PrivateIpAddress`, indicating the EIP is bound to the specified private IP of the specified ENI. At the same time, you must ensure the specified `PrivateIpAddress` is a private IP on the `NetworkInterfaceId`. You can query the private IP of the specified ENI by logging into the [Console](https://console.cloud.tencent.com/vpc/eni). You can also obtain the parameter value from the `privateIpAddress` field in the returned result of [DescribeNetworkInterfaces](https://intl.cloud.tencent.com/document/api/215/15817?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.PrivateIpAddress = null;

        /**
         * Specify whether to configure direct access when binding EIPs. For details, see [EIP Direct Access](https://intl.cloud.tencent.com/document/product/213/12540). Valid values: `True` and `False` (default). This parameter can be set to `True` when binding EIPs to a CVM instance or EKS cluster. It is in a beta test. To try it out, please [submit a ticket](https://console.cloud.tencent.com/workorder/category?level1_id=6&level2_id=163&source=0&data_title=%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%20CLB&level3_id=1071&queue=96&scene_code=34639&step=2).
         * @type {boolean || null}
         */
        this.EipDirectConnection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AddressId = 'AddressId' in params ? params.AddressId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.PrivateIpAddress = 'PrivateIpAddress' in params ? params.PrivateIpAddress : null;
        this.EipDirectConnection = 'EipDirectConnection' in params ? params.EipDirectConnection : null;

    }
}

/**
 * The outbound bandwidth cap of the CCN region
 * @class
 */
class CcnRegionBandwidthLimit extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region, such as `ap-guangzhou`
         * @type {string || null}
         */
        this.Region = null;

        /**
         * The outbound bandwidth cap. Units: Mbps
         * @type {number || null}
         */
        this.BandwidthLimit = null;

        /**
         * Whether it is a BM region. The default is `false`.
         * @type {boolean || null}
         */
        this.IsBm = null;

        /**
         * The target region, such as `ap-shanghai`
Note: This field may return null, indicating no valid value.
         * @type {string || null}
         */
        this.DstRegion = null;

        /**
         * Whether the target region is a BM region. The default is `false`.
         * @type {boolean || null}
         */
        this.DstIsBm = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Region = 'Region' in params ? params.Region : null;
        this.BandwidthLimit = 'BandwidthLimit' in params ? params.BandwidthLimit : null;
        this.IsBm = 'IsBm' in params ? params.IsBm : null;
        this.DstRegion = 'DstRegion' in params ? params.DstRegion : null;
        this.DstIsBm = 'DstIsBm' in params ? params.DstIsBm : null;

    }
}

/**
 * DescribeRoutePolicyEntries request structure.
 * @class
 */
class DescribeRoutePolicyEntriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter criteria. RoutePolicyEntryIds and Filters cannot be specified at the same time.
<li>route-policy-id - String - (filter condition) specifies the instance id of the route reception policy, such as rrp-f49l6u0z.</li>.
<li>cidr-block - String - (filter condition) cidr (subnet part before the mask), such as 10.0.0.0/8.</li>.
<li>priority - Integer - filter condition. specifies the priority, such as 20.</li>.
<li>gateway-type - String - (filter criteria) next hop type, such as CVM.</li>.
<li>GatewayId - String - specifies the unique id of the next hop instance, such as ccn-f49l6u0z.</li>.
<li>route-type - String - (filter condition) routing type. valid values: USER (USER route), NETD (route issued by network probe), CCN (CCN route).</li>.
<li>action - String - (filter condition) specifies the action. valid values: DROP (DROP), DISABLE (receive and DISABLE), ACCEPT (receive and enable).</li>.
<li>description - String - specifies the filter condition description, such as TEST.</li>.
<li>route-policy-item-id - String - (filter condition) specifies the entry unique id of the route reception policy, such as rrpi-dq782kw7.</li>.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of request objects.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sorting field. currently only supports the priority field.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Specifies the sorting order.
ASC: ascending order.
DESC: descending order.
         * @type {string || null}
         */
        this.OrderDirection = null;

        /**
         * Specifies the routing strategy entry ID.
         * @type {Array.<string> || null}
         */
        this.RoutePolicyEntryIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderDirection = 'OrderDirection' in params ? params.OrderDirection : null;
        this.RoutePolicyEntryIds = 'RoutePolicyEntryIds' in params ? params.RoutePolicyEntryIds : null;

    }
}

/**
 * Details of allowed endpoint services
 * @class
 */
class VpcEndPointServiceUser extends  AbstractModel {
    constructor(){
        super();

        /**
         * APP ID
         * @type {number || null}
         */
        this.Owner = null;

        /**
         * User UIN
         * @type {string || null}
         */
        this.UserUin = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Endpoint service ID
         * @type {string || null}
         */
        this.EndPointServiceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.UserUin = 'UserUin' in params ? params.UserUin : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.EndPointServiceId = 'EndPointServiceId' in params ? params.EndPointServiceId : null;

    }
}

/**
 * Classiclink instance
 * @class
 */
class ClassicLinkInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC instance ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The unique ID of the CVM instance
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DeleteLocalGateway response structure.
 * @class
 */
class DeleteLocalGatewayResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Binding relationship of the ENI
 * @class
 */
class NetworkInterfaceAttachment extends  AbstractModel {
    constructor(){
        super();

        /**
         * CVM instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The serial number of ENI in the CVM instance.
         * @type {number || null}
         */
        this.DeviceIndex = null;

        /**
         * The account information of the CVM owner.
         * @type {string || null}
         */
        this.InstanceAccountId = null;

        /**
         * Binding time
         * @type {string || null}
         */
        this.AttachTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DeviceIndex = 'DeviceIndex' in params ? params.DeviceIndex : null;
        this.InstanceAccountId = 'InstanceAccountId' in params ? params.InstanceAccountId : null;
        this.AttachTime = 'AttachTime' in params ? params.AttachTime : null;

    }
}

/**
 * Snapshot file information
 * @class
 */
class SnapshotFileInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Snapshot policy ID
         * @type {string || null}
         */
        this.SnapshotPolicyId = null;

        /**
         * ID of the instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Snapshot file ID
         * @type {string || null}
         */
        this.SnapshotFileId = null;

        /**
         * Backup time
         * @type {string || null}
         */
        this.BackupTime = null;

        /**
         * Operator UIN
         * @type {string || null}
         */
        this.Operator = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SnapshotPolicyId = 'SnapshotPolicyId' in params ? params.SnapshotPolicyId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SnapshotFileId = 'SnapshotFileId' in params ? params.SnapshotFileId : null;
        this.BackupTime = 'BackupTime' in params ? params.BackupTime : null;
        this.Operator = 'Operator' in params ? params.Operator : null;

    }
}

/**
 * ModifyNetworkInterfaceAttribute request structure.
 * @class
 */
class ModifyNetworkInterfaceAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-pxir56ns`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The name of the ENI. The maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetworkInterfaceName = null;

        /**
         * ENI description can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.NetworkInterfaceDescription = null;

        /**
         * The specified security groups to be bound with, such as ['sg-1dd51d'].
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Configuration of the ENI trunking mode. Valid values: `Enable` and `Disable`. Default value: `Disable`.
         * @type {string || null}
         */
        this.TrunkingFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;
        this.NetworkInterfaceName = 'NetworkInterfaceName' in params ? params.NetworkInterfaceName : null;
        this.NetworkInterfaceDescription = 'NetworkInterfaceDescription' in params ? params.NetworkInterfaceDescription : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;
        this.TrunkingFlag = 'TrunkingFlag' in params ? params.TrunkingFlag : null;

    }
}

/**
 * ModifyHaVipAttribute request structure.
 * @class
 */
class ModifyHaVipAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the `HAVIP`, such as `havip-9o233uri`.
         * @type {string || null}
         */
        this.HaVipId = null;

        /**
         * `HAVIP` can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.HaVipName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HaVipId = 'HaVipId' in params ? params.HaVipId : null;
        this.HaVipName = 'HaVipName' in params ? params.HaVipName : null;

    }
}

/**
 * ModifyAddressTemplateGroupAttribute response structure.
 * @class
 */
class ModifyAddressTemplateGroupAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachClassicLinkVpc response structure.
 * @class
 */
class DetachClassicLinkVpcResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UnassignPrivateIpAddresses request structure.
 * @class
 */
class UnassignPrivateIpAddressesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The information of the specified private IPs. You can specify a maximum of 10 each time.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddresses = null;

        /**
         * Instance ID of the server bound with this IP. This parameter is only applicable when you need to return an IP and unbind the related servers.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.PrivateIpAddresses) {
            this.PrivateIpAddresses = new Array();
            for (let z in params.PrivateIpAddresses) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddresses[z]);
                this.PrivateIpAddresses.push(obj);
            }
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DeleteVpnGatewayRoutes request structure.
 * @class
 */
class DeleteVpnGatewayRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID of the VPN gateway
         * @type {string || null}
         */
        this.VpnGatewayId = null;

        /**
         * List of route IDs
         * @type {Array.<string> || null}
         */
        this.RouteIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpnGatewayId = 'VpnGatewayId' in params ? params.VpnGatewayId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;

    }
}

/**
 * Filter
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * The attribute name. If more than one Filter exists, the logical relation between these Filters is `AND`.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Attribute value. If multiple values exist in one filter, the logical relationship between these values is `OR`. For a `bool` parameter, the valid values include `TRUE` and `FALSE`.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * ModifyNetDetect response structure.
 * @class
 */
class ModifyNetDetectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateHaVip request structure.
 * @class
 */
class CreateHaVipRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the VPC to which the `HAVIP` belongs.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The name of the `HAVIP`.
         * @type {string || null}
         */
        this.HaVipName = null;

        /**
         * The `ID` of the subnet to which the `HAVIP` belongs.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The specified virtual IP address, which must be within the IP range of the `VPC` and not in use. It will be automatically assigned if not specified.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * The ID of the ENI associated with the HAVIP.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.HaVipName = 'HaVipName' in params ? params.HaVipName : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

    }
}

/**
 * IPv6 subnet IP range object.
 * @class
 */
class Ipv6SubnetCidrBlock extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `ID` of the subnet instance, such as `subnet-pxir56ns`.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The `IPv6` subnet IP range, such as `3402:4e00:20:1001::/64`
         * @type {string || null}
         */
        this.Ipv6CidrBlock = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Ipv6CidrBlock = 'Ipv6CidrBlock' in params ? params.Ipv6CidrBlock : null;

    }
}

/**
 * EnableFlowLogs response structure.
 * @class
 */
class EnableFlowLogsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAddressQuota response structure.
 * @class
 */
class DescribeAddressQuotaResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The quota information of EIPs in an account.
         * @type {Array.<Quota> || null}
         */
        this.QuotaSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.QuotaSet) {
            this.QuotaSet = new Array();
            for (let z in params.QuotaSet) {
                let obj = new Quota();
                obj.deserialize(params.QuotaSet[z]);
                this.QuotaSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateCustomerGateway request structure.
 * @class
 */
class CreateCustomerGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Customer gateway can be named freely, but the maximum length is 60 characters.
         * @type {string || null}
         */
        this.CustomerGatewayName = null;

        /**
         * Customer gateway public IP.
         * @type {string || null}
         */
        this.IpAddress = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayName = 'CustomerGatewayName' in params ? params.CustomerGatewayName : null;
        this.IpAddress = 'IpAddress' in params ? params.IpAddress : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DeleteSecurityGroup request structure.
 * @class
 */
class DeleteSecurityGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. This can be obtained through DescribeSecurityGroups.
         * @type {string || null}
         */
        this.SecurityGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupId = 'SecurityGroupId' in params ? params.SecurityGroupId : null;

    }
}

/**
 * Compliance review request
 * @class
 */
class CrossBorderCompliance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Service provider. Valid values: `UNICOM`.
         * @type {string || null}
         */
        this.ServiceProvider = null;

        /**
         * ID of compliance review request.
         * @type {number || null}
         */
        this.ComplianceId = null;

        /**
         * Full company name.
         * @type {string || null}
         */
        this.Company = null;

        /**
         * Unified Social Credit Code.
         * @type {string || null}
         */
        this.UniformSocialCreditCode = null;

        /**
         * Legal person.
         * @type {string || null}
         */
        this.LegalPerson = null;

        /**
         * Issuing authority.
         * @type {string || null}
         */
        this.IssuingAuthority = null;

        /**
         * Business license.
         * @type {string || null}
         */
        this.BusinessLicense = null;

        /**
         * Business address.
         * @type {string || null}
         */
        this.BusinessAddress = null;

        /**
         * Zip code.
         * @type {number || null}
         */
        this.PostCode = null;

        /**
         * Operator.
         * @type {string || null}
         */
        this.Manager = null;

        /**
         * Operator ID card number.
         * @type {string || null}
         */
        this.ManagerId = null;

        /**
         * Operator ID card.
         * @type {string || null}
         */
        this.ManagerIdCard = null;

        /**
         * Operator address.
         * @type {string || null}
         */
        this.ManagerAddress = null;

        /**
         * Operator phone number.
         * @type {string || null}
         */
        this.ManagerTelephone = null;

        /**
         * Email.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Service handling form.
         * @type {string || null}
         */
        this.ServiceHandlingForm = null;

        /**
         * Authorization letter.
         * @type {string || null}
         */
        this.AuthorizationLetter = null;

        /**
         * Information security commitment.
         * @type {string || null}
         */
        this.SafetyCommitment = null;

        /**
         * Service start date.
         * @type {string || null}
         */
        this.ServiceStartDate = null;

        /**
         * Service end date.
         * @type {string || null}
         */
        this.ServiceEndDate = null;

        /**
         * Status. Valid values: `PENDING`, `APPROVED`, and `DENY`.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Creation time of the review form.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceProvider = 'ServiceProvider' in params ? params.ServiceProvider : null;
        this.ComplianceId = 'ComplianceId' in params ? params.ComplianceId : null;
        this.Company = 'Company' in params ? params.Company : null;
        this.UniformSocialCreditCode = 'UniformSocialCreditCode' in params ? params.UniformSocialCreditCode : null;
        this.LegalPerson = 'LegalPerson' in params ? params.LegalPerson : null;
        this.IssuingAuthority = 'IssuingAuthority' in params ? params.IssuingAuthority : null;
        this.BusinessLicense = 'BusinessLicense' in params ? params.BusinessLicense : null;
        this.BusinessAddress = 'BusinessAddress' in params ? params.BusinessAddress : null;
        this.PostCode = 'PostCode' in params ? params.PostCode : null;
        this.Manager = 'Manager' in params ? params.Manager : null;
        this.ManagerId = 'ManagerId' in params ? params.ManagerId : null;
        this.ManagerIdCard = 'ManagerIdCard' in params ? params.ManagerIdCard : null;
        this.ManagerAddress = 'ManagerAddress' in params ? params.ManagerAddress : null;
        this.ManagerTelephone = 'ManagerTelephone' in params ? params.ManagerTelephone : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.ServiceHandlingForm = 'ServiceHandlingForm' in params ? params.ServiceHandlingForm : null;
        this.AuthorizationLetter = 'AuthorizationLetter' in params ? params.AuthorizationLetter : null;
        this.SafetyCommitment = 'SafetyCommitment' in params ? params.SafetyCommitment : null;
        this.ServiceStartDate = 'ServiceStartDate' in params ? params.ServiceStartDate : null;
        this.ServiceEndDate = 'ServiceEndDate' in params ? params.ServiceEndDate : null;
        this.State = 'State' in params ? params.State : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * CreateRouteTable response structure.
 * @class
 */
class CreateRouteTableResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route table object.
         * @type {RouteTable || null}
         */
        this.RouteTable = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RouteTable) {
            let obj = new RouteTable();
            obj.deserialize(params.RouteTable)
            this.RouteTable = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRoutePolicyEntries response structure.
 * @class
 */
class CreateRoutePolicyEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteDirectConnectGateway request structure.
 * @class
 */
class DeleteDirectConnectGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique `ID` of the direct connect gateway, such as `dcg-9o233uri`.
         * @type {string || null}
         */
        this.DirectConnectGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DirectConnectGatewayId = 'DirectConnectGatewayId' in params ? params.DirectConnectGatewayId : null;

    }
}

/**
 * DescribeDirectConnectGatewayCcnRoutes response structure.
 * @class
 */
class DescribeDirectConnectGatewayCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of objects meeting the condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The CCN route (IDC IP range) list.
         * @type {Array.<DirectConnectGatewayCcnRoute> || null}
         */
        this.RouteSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RouteSet) {
            this.RouteSet = new Array();
            for (let z in params.RouteSet) {
                let obj = new DirectConnectGatewayCcnRoute();
                obj.deserialize(params.RouteSet[z]);
                this.RouteSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyPrivateIpAddressesAttribute request structure.
 * @class
 */
class ModifyPrivateIpAddressesAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the ENI instance, such as `eni-m6dyj72l`.
         * @type {string || null}
         */
        this.NetworkInterfaceId = null;

        /**
         * The specified private IP information.
         * @type {Array.<PrivateIpAddressSpecification> || null}
         */
        this.PrivateIpAddresses = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceId = 'NetworkInterfaceId' in params ? params.NetworkInterfaceId : null;

        if (params.PrivateIpAddresses) {
            this.PrivateIpAddresses = new Array();
            for (let z in params.PrivateIpAddresses) {
                let obj = new PrivateIpAddressSpecification();
                obj.deserialize(params.PrivateIpAddresses[z]);
                this.PrivateIpAddresses.push(obj);
            }
        }

    }
}

/**
 * ResetNatGatewayConnection response structure.
 * @class
 */
class ResetNatGatewayConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AssociateNetworkInterfaceSecurityGroups request structure.
 * @class
 */
class AssociateNetworkInterfaceSecurityGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ENI instance ID, e.g. eni-pxir56ns. You can enter up to 100 instances for each request.
         * @type {Array.<string> || null}
         */
        this.NetworkInterfaceIds = null;

        /**
         * The security group instance ID, such as `sg-33ocnj9n`. It can be obtained through DescribeSecurityGroups. You can enter up to 100 instances for each request.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NetworkInterfaceIds = 'NetworkInterfaceIds' in params ? params.NetworkInterfaceIds : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * DeleteVpnGatewayRoutes response structure.
 * @class
 */
class DeleteVpnGatewayRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSecurityGroup request structure.
 * @class
 */
class CreateSecurityGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group can be named freely, but cannot exceed 60 characters.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * The remarks for the security group. The maximum length is 100 characters.
         * @type {string || null}
         */
        this.GroupDescription = null;

        /**
         * Project ID. The default is 0. You can query it on the project management page of the Qcloud console.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}].
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupDescription = 'GroupDescription' in params ? params.GroupDescription : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * ModifyCcnAttribute response structure.
 * @class
 */
class ModifyCcnAttributeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Route reception policy binding. used to bind the route table and route reception policy and specify the binding priority.
 * @class
 */
class RoutePolicyAssociation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique route table ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Specifies the unique ID of the route reception policy.
         * @type {string || null}
         */
        this.RoutePolicyId = null;

        /**
         * Priority.
         * @type {number || null}
         */
        this.Priority = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RoutePolicyId = 'RoutePolicyId' in params ? params.RoutePolicyId : null;
        this.Priority = 'Priority' in params ? params.Priority : null;

    }
}

/**
 * DescribeClassicLinkInstances request structure.
 * @class
 */
class DescribeClassicLinkInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter conditions.
<li>vpc-id - String - (Filter condition) The VPC instance ID.</li>
<li>vm-ip - String - (Filter condition) The IP address of the CVM on the basic network.</li>
         * @type {Array.<FilterObject> || null}
         */
        this.Filters = null;

        /**
         * Offset
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * The returned quantity
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new FilterObject();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ReleaseIp6AddressesBandwidth request structure.
 * @class
 */
class ReleaseIp6AddressesBandwidthRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IPv6 addresses. Both Ip6Addresses and Ip6AddressIds are required, but they cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.Ip6Addresses = null;

        /**
         * Unique IDs corresponding to the IPv6 addresses. Format: eip-xxxxxxxx. Both Ip6Addresses and Ip6AddressIds are required, but they cannot be specified at the same time.
         * @type {Array.<string> || null}
         */
        this.Ip6AddressIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip6Addresses = 'Ip6Addresses' in params ? params.Ip6Addresses : null;
        this.Ip6AddressIds = 'Ip6AddressIds' in params ? params.Ip6AddressIds : null;

    }
}

/**
 * CreateServiceTemplate response structure.
 * @class
 */
class CreateServiceTemplateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port template object.
         * @type {ServiceTemplate || null}
         */
        this.ServiceTemplate = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ServiceTemplate) {
            let obj = new ServiceTemplate();
            obj.deserialize(params.ServiceTemplate)
            this.ServiceTemplate = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetworkInterface response structure.
 * @class
 */
class DeleteNetworkInterfaceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DisableCcnRoutes response structure.
 * @class
 */
class DisableCcnRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCcnRegionBandwidthLimits request structure.
 * @class
 */
class DescribeCcnRegionBandwidthLimitsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The CCN instance ID in the format of `ccn-f49l6u0z`.
         * @type {string || null}
         */
        this.CcnId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CcnId = 'CcnId' in params ? params.CcnId : null;

    }
}

/**
 * ModifyReserveIpAddress response structure.
 * @class
 */
class ModifyReserveIpAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateAssistantCidr response structure.
 * @class
 */
class CreateAssistantCidrResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of secondary CIDR blocks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<AssistantCidr> || null}
         */
        this.AssistantCidrSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AssistantCidrSet) {
            this.AssistantCidrSet = new Array();
            for (let z in params.AssistantCidrSet) {
                let obj = new AssistantCidr();
                obj.deserialize(params.AssistantCidrSet[z]);
                this.AssistantCidrSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Customer gateway vendor information object.
 * @class
 */
class CustomerGatewayVendor extends  AbstractModel {
    constructor(){
        super();

        /**
         * Platform.
         * @type {string || null}
         */
        this.Platform = null;

        /**
         * Software version.
         * @type {string || null}
         */
        this.SoftwareVersion = null;

        /**
         * Vendor name.
         * @type {string || null}
         */
        this.VendorName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Platform = 'Platform' in params ? params.Platform : null;
        this.SoftwareVersion = 'SoftwareVersion' in params ? params.SoftwareVersion : null;
        this.VendorName = 'VendorName' in params ? params.VendorName : null;

    }
}

/**
 * DescribeAddressTemplates request structure.
 * @class
 */
class DescribeAddressTemplatesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filters
<li>address-template-name - IP address template name.</li>
<li>address-template-id - IP address template ID, such as `ipm-mdunqeb6`.</li>
<li>address-ip - IP address.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. The default value is 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of values to be returned. The default value is 20. Maximum is 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Conflict resource.
 * @class
 */
class ConflictSource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Conflict resource ID
         * @type {string || null}
         */
        this.ConflictSourceId = null;

        /**
         * Conflict resource
         * @type {string || null}
         */
        this.SourceItem = null;

        /**
         * Conflict resource items
         * @type {Array.<ConflictItem> || null}
         */
        this.ConflictItemSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConflictSourceId = 'ConflictSourceId' in params ? params.ConflictSourceId : null;
        this.SourceItem = 'SourceItem' in params ? params.SourceItem : null;

        if (params.ConflictItemSet) {
            this.ConflictItemSet = new Array();
            for (let z in params.ConflictItemSet) {
                let obj = new ConflictItem();
                obj.deserialize(params.ConflictItemSet[z]);
                this.ConflictItemSet.push(obj);
            }
        }

    }
}

/**
 * EnableRoutes request structure.
 * @class
 */
class EnableRoutesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique route table ID.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Routing policy ID. This parameter cannot be used simultaneously with RouteItemIds, but at least one of them should be entered. The maximum number of items processed in a single request is 100. The value of this parameter can be obtained by querying the route list ([DescribeRouteTables](https://intl.cloud.tencent.com/document/product/215/15763?from_cn_redirect=1)).
         * @type {Array.<number> || null}
         */
        this.RouteIds = null;

        /**
         * Unique routing policy ID. This parameter cannot be used simultaneously with RouteIds, but at least one of them should be entered. The maximum number of items processed in a single request is 100. The value of this parameter can be obtained by querying the route list ([DescribeRouteTables](https://intl.cloud.tencent.com/document/product/215/15763?from_cn_redirect=1)).
         * @type {Array.<string> || null}
         */
        this.RouteItemIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.RouteIds = 'RouteIds' in params ? params.RouteIds : null;
        this.RouteItemIds = 'RouteItemIds' in params ? params.RouteItemIds : null;

    }
}

/**
 * DeleteTrafficPackages response structure.
 * @class
 */
class DeleteTrafficPackagesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCustomerGateway request structure.
 * @class
 */
class DeleteCustomerGatewayRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the customer gateway, such as `cgw-2wqq41m9`. You can query the customer gateway by using the [DescribeCustomerGateways](https://intl.cloud.tencent.com/document/api/215/17516?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CustomerGatewayId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CustomerGatewayId = 'CustomerGatewayId' in params ? params.CustomerGatewayId : null;

    }
}

/**
 * DescribeAddressTemplates response structure.
 * @class
 */
class DescribeAddressTemplatesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of instances meeting the filter condition.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * IP address template.
         * @type {Array.<AddressTemplate> || null}
         */
        this.AddressTemplateSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AddressTemplateSet) {
            this.AddressTemplateSet = new Array();
            for (let z in params.AddressTemplateSet) {
                let obj = new AddressTemplate();
                obj.deserialize(params.AddressTemplateSet[z]);
                this.AddressTemplateSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Quota description information
 * @class
 */
class Quota extends  AbstractModel {
    constructor(){
        super();

        /**
         * Quota name. Value range:<br><li>`TOTAL_EIP_QUOTA`:EIP quota under the user's current region<br><li>`DAILY_EIP_APPLY`: Number of EIP applications submitted daily under the user's current region<br><li>`DAILY_PUBLIC_IP_ASSIGN`: Number of public IP reassignments under the user's current region.
         * @type {string || null}
         */
        this.QuotaId = null;

        /**
         * Current count
         * @type {number || null}
         */
        this.QuotaCurrent = null;

        /**
         * Quota
         * @type {number || null}
         */
        this.QuotaLimit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QuotaId = 'QuotaId' in params ? params.QuotaId : null;
        this.QuotaCurrent = 'QuotaCurrent' in params ? params.QuotaCurrent : null;
        this.QuotaLimit = 'QuotaLimit' in params ? params.QuotaLimit : null;

    }
}

/**
 * WithdrawNotifyRoutes response structure.
 * @class
 */
class WithdrawNotifyRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyIPv6AddressesAttributes response structure.
 * @class
 */
class ModifyIPv6AddressesAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNetworkInterfaces response structure.
 * @class
 */
class DescribeNetworkInterfacesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of instance details.
         * @type {Array.<NetworkInterface> || null}
         */
        this.NetworkInterfaceSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetworkInterfaceSet) {
            this.NetworkInterfaceSet = new Array();
            for (let z in params.NetworkInterfaceSet) {
                let obj = new NetworkInterface();
                obj.deserialize(params.NetworkInterfaceSet[z]);
                this.NetworkInterfaceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetworkAcl response structure.
 * @class
 */
class DeleteNetworkAclResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteNetworkAclQuintupleEntries response structure.
 * @class
 */
class DeleteNetworkAclQuintupleEntriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeServiceTemplateGroups request structure.
 * @class
 */
class DescribeServiceTemplateGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter conditions.
<li>service-template-group-name - String - (Filter condition) Protocol port template group name.</li>
<li>service-template-group-id - String - (Filter condition) Protocol port template group instance ID, such as `ppmg-e6dy460g`.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. The default value is 0.
         * @type {string || null}
         */
        this.Offset = null;

        /**
         * Number of values to be returned. The default value is 20. Maximum is 100.
         * @type {string || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * CreateSecurityGroupWithPolicies request structure.
 * @class
 */
class CreateSecurityGroupWithPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security group can be named freely, but cannot exceed 60 characters.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * The remarks for the security group. The maximum length is 100 characters.
         * @type {string || null}
         */
        this.GroupDescription = null;

        /**
         * Project ID. Default value: 0. You can query it on the <a href="https://console.cloud.tencent.com/project">project management page</a> of the Tencent Cloud console.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Security group policy set.
         * @type {SecurityGroupPolicySet || null}
         */
        this.SecurityGroupPolicySet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.GroupDescription = 'GroupDescription' in params ? params.GroupDescription : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.SecurityGroupPolicySet) {
            let obj = new SecurityGroupPolicySet();
            obj.deserialize(params.SecurityGroupPolicySet)
            this.SecurityGroupPolicySet = obj;
        }

    }
}

/**
 * CreateVpc request structure.
 * @class
 */
class CreateVpcRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPC name. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * VPC CIDR block, which must fall within the following three private network IP ranges: 10.0.0.0/12, 172.16.0.0/12, and 192.168.0.0/16.
         * @type {string || null}
         */
        this.CidrBlock = null;

        /**
         * Whether multicast is enabled. `true`: Enabled. `false`: Not enabled.
         * @type {string || null}
         */
        this.EnableMulticast = null;

        /**
         * DNS address. A maximum of 4 addresses is supported.
         * @type {Array.<string> || null}
         */
        this.DnsServers = null;

        /**
         * Domain name of DHCP
         * @type {string || null}
         */
        this.DomainName = null;

        /**
         * Bound tags, such as [{"Key": "city", "Value": "shanghai"}]
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Vpc association with CCN route publish policy. true: enables cidr route publishing. false: enables subnet route publishing. default is subnet route publishing when creating a vpc. to select cidr route publishing, submit a ticket for adding to allowlist.
         * @type {boolean || null}
         */
        this.EnableRouteVpcPublish = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.CidrBlock = 'CidrBlock' in params ? params.CidrBlock : null;
        this.EnableMulticast = 'EnableMulticast' in params ? params.EnableMulticast : null;
        this.DnsServers = 'DnsServers' in params ? params.DnsServers : null;
        this.DomainName = 'DomainName' in params ? params.DomainName : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.EnableRouteVpcPublish = 'EnableRouteVpcPublish' in params ? params.EnableRouteVpcPublish : null;

    }
}

/**
 * DescribeSubnetResourceDashboard response structure.
 * @class
 */
class DescribeSubnetResourceDashboardResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information of resources returned
         * @type {Array.<ResourceStatistics> || null}
         */
        this.ResourceStatisticsSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ResourceStatisticsSet) {
            this.ResourceStatisticsSet = new Array();
            for (let z in params.ResourceStatisticsSet) {
                let obj = new ResourceStatistics();
                obj.deserialize(params.ResourceStatisticsSet[z]);
                this.ResourceStatisticsSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteServiceTemplate request structure.
 * @class
 */
class DeleteServiceTemplateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Protocol port template instance ID, such as `ppm-e6dy460g`.
         * @type {string || null}
         */
        this.ServiceTemplateId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceTemplateId = 'ServiceTemplateId' in params ? params.ServiceTemplateId : null;

    }
}

/**
 * DescribeSecurityGroupAssociationStatistics request structure.
 * @class
 */
class DescribeSecurityGroupAssociationStatisticsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Security instance ID, such as `sg-33ocnj9n`. It can be obtained through DescribeSecurityGroups.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

    }
}

/**
 * NotifyRoutes response structure.
 * @class
 */
class NotifyRoutesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Routing policy object
 * @class
 */
class Route extends  AbstractModel {
    constructor(){
        super();

        /**
         * Destination IP range, such as 112.20.51.0/24. Values cannot be in the VPC IP range.
         * @type {string || null}
         */
        this.DestinationCidrBlock = null;

        /**
         * Type of the next hop. Valid values:
`CVM`: public gateway CVM;
`VPN`: VPN gateway;
`DIRECTCONNECT`: direct connect gateway;
`PEERCONNECTION`: peering connection;
`HAVIP`: HAVIP;
`NAT`: NAT Gateway; 
`NORMAL_CVM`: normal CVM;
`EIP`: public IP address of the CVM;
`LOCAL_GATEWAY`: local gateway.
         * @type {string || null}
         */
        this.GatewayType = null;

        /**
         * Next hop address. You simply need to specify the gateway ID of a different next hop type, and the system will automatically match the next hop address. 
Note: If `GatewayType` is set to `NORMAL_CVM`, `GatewayId` should be the private IP of the instance.
         * @type {string || null}
         */
        this.GatewayId = null;

        /**
         * Routing policy ID. The IPv4 routing policy will have a meaningful value, while the IPv6 routing policy is always 0. We recommend using the unique ID `RouteItemId` for the routing policy.
This field is required when you want to delete a routing policy.
         * @type {number || null}
         */
        this.RouteId = null;

        /**
         * The description of the routing policy.
         * @type {string || null}
         */
        this.RouteDescription = null;

        /**
         * Whether it is enabled
         * @type {boolean || null}
         */
        this.Enabled = null;

        /**
         * The route type. Currently, the following types are supported:
USER: User route;
NETD: Network probe route. When creating a network probe route, the system delivers by default. It cannot be edited or deleted;
CCN: CCN route. The system delivers by default. It cannot be edited or deleted.
Users can only add and operate USER-type routes.
         * @type {string || null}
         */
        this.RouteType = null;

        /**
         * Route table instance ID, such as rtb-azd4dt1c.
         * @type {string || null}
         */
        this.RouteTableId = null;

        /**
         * Destination IPv6 IP range, which cannot be included in VPC IP range, such as 2402:4e00:1000:810b::/64.
         * @type {string || null}
         */
        this.DestinationIpv6CidrBlock = null;

        /**
         * Unique routing policy ID.
         * @type {string || null}
         */
        this.RouteItemId = null;

        /**
         * Whether the routing policy is published to CCN.
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.PublishedToVbc = null;

        /**
         * Creation time of the routing policy
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DestinationCidrBlock = 'DestinationCidrBlock' in params ? params.DestinationCidrBlock : null;
        this.GatewayType = 'GatewayType' in params ? params.GatewayType : null;
        this.GatewayId = 'GatewayId' in params ? params.GatewayId : null;
        this.RouteId = 'RouteId' in params ? params.RouteId : null;
        this.RouteDescription = 'RouteDescription' in params ? params.RouteDescription : null;
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.RouteType = 'RouteType' in params ? params.RouteType : null;
        this.RouteTableId = 'RouteTableId' in params ? params.RouteTableId : null;
        this.DestinationIpv6CidrBlock = 'DestinationIpv6CidrBlock' in params ? params.DestinationIpv6CidrBlock : null;
        this.RouteItemId = 'RouteItemId' in params ? params.RouteItemId : null;
        this.PublishedToVbc = 'PublishedToVbc' in params ? params.PublishedToVbc : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * ModifySubnetAttribute request structure.
 * @class
 */
class ModifySubnetAttributeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet instance ID, such as `subnet-pxir56ns`.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * The subnet name. The maximum length is 60 bytes.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * Whether the subnet has broadcast enabled.
         * @type {string || null}
         */
        this.EnableBroadcast = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.EnableBroadcast = 'EnableBroadcast' in params ? params.EnableBroadcast : null;

    }
}

/**
 * DescribeBandwidthPackageQuota request structure.
 * @class
 */
class DescribeBandwidthPackageQuotaRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DeleteVpc response structure.
 * @class
 */
class DeleteVpcResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Prepaid (monthly subscription) billing object.
 * @class
 */
class InstanceChargePrepaid extends  AbstractModel {
    constructor(){
        super();

        /**
         * Purchased usage period (in month). Value range: [1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 24, 36].
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Auto-renewal ID. Value range: NOTIFY_AND_AUTO_RENEW: notify expiry and renew automatically, NOTIFY_AND_MANUAL_RENEW: notify expiry but do not renew automatically. The default is NOTIFY_AND_MANUAL_RENEW
         * @type {string || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Period = 'Period' in params ? params.Period : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * CreateRoutePolicyAssociations response structure.
 * @class
 */
class CreateRoutePolicyAssociationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AddTemplateMember request structure.
 * @class
 */
class AddTemplateMemberRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter template instance ID, which can be the instance ID of a parameter template of the following four types: IP address, protocol port, IP address group, and protocol port group.
         * @type {string || null}
         */
        this.TemplateId = null;

        /**
         * Information on the parameter template to be added. The template can be of the following four types: IP address, protocol port, IP address group, and protocol port group. The type should be consistent with that of the template specified by the TemplateId parameter.
         * @type {Array.<MemberInfo> || null}
         */
        this.TemplateMember = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TemplateId = 'TemplateId' in params ? params.TemplateId : null;

        if (params.TemplateMember) {
            this.TemplateMember = new Array();
            for (let z in params.TemplateMember) {
                let obj = new MemberInfo();
                obj.deserialize(params.TemplateMember[z]);
                this.TemplateMember.push(obj);
            }
        }

    }
}

/**
 * DescribeVpcEndPointServiceWhiteList response structure.
 * @class
 */
class DescribeVpcEndPointServiceWhiteListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of allowed endpoint services
         * @type {Array.<VpcEndPointServiceUser> || null}
         */
        this.VpcEndpointServiceUserSet = null;

        /**
         * Number of matched allowlists
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VpcEndpointServiceUserSet) {
            this.VpcEndpointServiceUserSet = new Array();
            for (let z in params.VpcEndpointServiceUserSet) {
                let obj = new VpcEndPointServiceUser();
                obj.deserialize(params.VpcEndpointServiceUserSet[z]);
                this.VpcEndpointServiceUserSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AcceptAttachCcnInstances response structure.
 * @class
 */
class AcceptAttachCcnInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUsedIpAddress response structure.
 * @class
 */
class DescribeUsedIpAddressResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information of resources bound with the queried IPs 
Note: This parameter may return null, indicating that no valid values can be obtained.
         * @type {Array.<IpAddressStates> || null}
         */
        this.IpAddressStates = null;

        /**
         * Number of taken IPs 
Note: This parameter may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.IpAddressStates) {
            this.IpAddressStates = new Array();
            for (let z in params.IpAddressStates) {
                let obj = new IpAddressStates();
                obj.deserialize(params.IpAddressStates[z]);
                this.IpAddressStates.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * IP address template information
 * @class
 */
class AddressInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * IP address
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Remarks
Note: this field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Address = 'Address' in params ? params.Address : null;
        this.Description = 'Description' in params ? params.Description : null;

    }
}

/**
 * AuditCrossBorderCompliance request structure.
 * @class
 */
class AuditCrossBorderComplianceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Service provider. Valid values: `UNICOM`.
         * @type {string || null}
         */
        this.ServiceProvider = null;

        /**
         * Unique ID of compliance review request.
         * @type {number || null}
         */
        this.ComplianceId = null;

        /**
         * Audit behavior. Valid values: `APPROVED` and `DENY`.
         * @type {string || null}
         */
        this.AuditBehavior = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceProvider = 'ServiceProvider' in params ? params.ServiceProvider : null;
        this.ComplianceId = 'ComplianceId' in params ? params.ComplianceId : null;
        this.AuditBehavior = 'AuditBehavior' in params ? params.AuditBehavior : null;

    }
}

/**
 * DescribeNetDetects response structure.
 * @class
 */
class DescribeNetDetectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The array of network detection objects that meet requirements.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NetDetect> || null}
         */
        this.NetDetectSet = null;

        /**
         * The number of network detection objects that meet requirements.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NetDetectSet) {
            this.NetDetectSet = new Array();
            for (let z in params.NetDetectSet) {
                let obj = new NetDetect();
                obj.deserialize(params.NetDetectSet[z]);
                this.NetDetectSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    GenerateVpnConnectionDefaultHealthCheckIpRequest: GenerateVpnConnectionDefaultHealthCheckIpRequest,
    CreateNetworkAclResponse: CreateNetworkAclResponse,
    NetworkAcl: NetworkAcl,
    ModifyAddressTemplateAttributeResponse: ModifyAddressTemplateAttributeResponse,
    ServiceTemplateGroup: ServiceTemplateGroup,
    CreateRoutesRequest: CreateRoutesRequest,
    DescribeHaVipsResponse: DescribeHaVipsResponse,
    SecurityGroupAssociationStatistics: SecurityGroupAssociationStatistics,
    DeleteServiceTemplateResponse: DeleteServiceTemplateResponse,
    CreateServiceTemplateRequest: CreateServiceTemplateRequest,
    IKEOptionsSpecification: IKEOptionsSpecification,
    CreateCcnResponse: CreateCcnResponse,
    DescribeVpnConnectionsRequest: DescribeVpnConnectionsRequest,
    CreateAssistantCidrRequest: CreateAssistantCidrRequest,
    DescribeNetworkInterfacesRequest: DescribeNetworkInterfacesRequest,
    ReleaseIp6AddressesBandwidthResponse: ReleaseIp6AddressesBandwidthResponse,
    DescribeVpcIpv6AddressesRequest: DescribeVpcIpv6AddressesRequest,
    SourceIpTranslationNatRule: SourceIpTranslationNatRule,
    DisableCcnRoutesRequest: DisableCcnRoutesRequest,
    ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse: ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse,
    ModifyNatGatewaySourceIpTranslationNatRuleRequest: ModifyNatGatewaySourceIpTranslationNatRuleRequest,
    SetVpnGatewaysRenewFlagRequest: SetVpnGatewaysRenewFlagRequest,
    ModifyCcnRegionBandwidthLimitsTypeResponse: ModifyCcnRegionBandwidthLimitsTypeResponse,
    DescribeVpnGatewaysResponse: DescribeVpnGatewaysResponse,
    ModifyNetworkAclQuintupleEntriesRequest: ModifyNetworkAclQuintupleEntriesRequest,
    ModifyServiceTemplateAttributeRequest: ModifyServiceTemplateAttributeRequest,
    SecurityGroupPolicy: SecurityGroupPolicy,
    DescribeIpGeolocationInfosRequest: DescribeIpGeolocationInfosRequest,
    AddTemplateMemberResponse: AddTemplateMemberResponse,
    ResetAttachCcnInstancesResponse: ResetAttachCcnInstancesResponse,
    CreateSnapshotPoliciesResponse: CreateSnapshotPoliciesResponse,
    DescribeServiceTemplateGroupsResponse: DescribeServiceTemplateGroupsResponse,
    DescribeVpcEndPointRequest: DescribeVpcEndPointRequest,
    AssignPrivateIpAddressesRequest: AssignPrivateIpAddressesRequest,
    ResourceStatisticsItem: ResourceStatisticsItem,
    DeleteRoutePolicyEntriesRequest: DeleteRoutePolicyEntriesRequest,
    DetachClassicLinkVpcRequest: DetachClassicLinkVpcRequest,
    DescribeBandwidthPackageBillUsageResponse: DescribeBandwidthPackageBillUsageResponse,
    DeleteBandwidthPackageResponse: DeleteBandwidthPackageResponse,
    ModifyNatGatewayAttributeRequest: ModifyNatGatewayAttributeRequest,
    DescribeLocalGatewayRequest: DescribeLocalGatewayRequest,
    FlowLog: FlowLog,
    ModifyDirectConnectGatewayAttributeRequest: ModifyDirectConnectGatewayAttributeRequest,
    IpField: IpField,
    CreateNetworkInterfaceResponse: CreateNetworkInterfaceResponse,
    AddBandwidthPackageResourcesRequest: AddBandwidthPackageResourcesRequest,
    ReplaceRoutePolicyEntriesRequest: ReplaceRoutePolicyEntriesRequest,
    AssignIpv6SubnetCidrBlockRequest: AssignIpv6SubnetCidrBlockRequest,
    ReplaceRoutePolicyAssociationsRequest: ReplaceRoutePolicyAssociationsRequest,
    CreateVpcResponse: CreateVpcResponse,
    AssistantCidr: AssistantCidr,
    ModifyNetworkAclEntriesRequest: ModifyNetworkAclEntriesRequest,
    ReplaceRoutePolicyAssociationsResponse: ReplaceRoutePolicyAssociationsResponse,
    DescribeVpcPrivateIpAddressesRequest: DescribeVpcPrivateIpAddressesRequest,
    AddressTemplate: AddressTemplate,
    ModifyTemplateMemberResponse: ModifyTemplateMemberResponse,
    VpnGatewayQuota: VpnGatewayQuota,
    DescribeBandwidthPackageBillUsageRequest: DescribeBandwidthPackageBillUsageRequest,
    UnassignIpv6AddressesResponse: UnassignIpv6AddressesResponse,
    DescribeFlowLogsRequest: DescribeFlowLogsRequest,
    DeleteTemplateMemberRequest: DeleteTemplateMemberRequest,
    CloneSecurityGroupRequest: CloneSecurityGroupRequest,
    AssociateNatGatewayAddressRequest: AssociateNatGatewayAddressRequest,
    CreateDirectConnectGatewayRequest: CreateDirectConnectGatewayRequest,
    CreateVpcEndPointRequest: CreateVpcEndPointRequest,
    ModifyBandwidthPackageAttributeRequest: ModifyBandwidthPackageAttributeRequest,
    TransformAddressResponse: TransformAddressResponse,
    DisassociateNetworkInterfaceSecurityGroupsRequest: DisassociateNetworkInterfaceSecurityGroupsRequest,
    RoutePolicyEntry: RoutePolicyEntry,
    SecurityGroupPolicySet: SecurityGroupPolicySet,
    ModifyFlowLogAttributeRequest: ModifyFlowLogAttributeRequest,
    UnassignIpv6SubnetCidrBlockResponse: UnassignIpv6SubnetCidrBlockResponse,
    ModifyVpcEndPointServiceAttributeRequest: ModifyVpcEndPointServiceAttributeRequest,
    DescribeIpGeolocationInfosResponse: DescribeIpGeolocationInfosResponse,
    DescribeVpcTaskResultRequest: DescribeVpcTaskResultRequest,
    AssociateNetworkAclSubnetsResponse: AssociateNetworkAclSubnetsResponse,
    DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest: DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest,
    ResetRoutesRequest: ResetRoutesRequest,
    CheckNetDetectStateRequest: CheckNetDetectStateRequest,
    RouteTableAssociation: RouteTableAssociation,
    ModifyCustomerGatewayAttributeRequest: ModifyCustomerGatewayAttributeRequest,
    DescribeRouteTablesResponse: DescribeRouteTablesResponse,
    DeleteVpcEndPointServiceWhiteListRequest: DeleteVpcEndPointServiceWhiteListRequest,
    DetachSnapshotInstancesResponse: DetachSnapshotInstancesResponse,
    ReplaceSecurityGroupPoliciesRequest: ReplaceSecurityGroupPoliciesRequest,
    DeleteVpcEndPointServiceRequest: DeleteVpcEndPointServiceRequest,
    DeleteCcnResponse: DeleteCcnResponse,
    ServiceTemplate: ServiceTemplate,
    DescribeCcnAttachedInstancesRequest: DescribeCcnAttachedInstancesRequest,
    AttachSnapshotInstancesResponse: AttachSnapshotInstancesResponse,
    DescribeNatGatewaySourceIpTranslationNatRulesRequest: DescribeNatGatewaySourceIpTranslationNatRulesRequest,
    DescribeNatGatewaysRequest: DescribeNatGatewaysRequest,
    ReferredSecurityGroup: ReferredSecurityGroup,
    InstanceJumbo: InstanceJumbo,
    ModifyFlowLogAttributeResponse: ModifyFlowLogAttributeResponse,
    DescribeBandwidthPackagesResponse: DescribeBandwidthPackagesResponse,
    ReplaceSecurityGroupPoliciesResponse: ReplaceSecurityGroupPoliciesResponse,
    DescribeDirectConnectGatewaysRequest: DescribeDirectConnectGatewaysRequest,
    DisassociateVpcEndPointSecurityGroupsRequest: DisassociateVpcEndPointSecurityGroupsRequest,
    DescribeIPv6AddressesResponse: DescribeIPv6AddressesResponse,
    AttachSnapshotInstancesRequest: AttachSnapshotInstancesRequest,
    CreateVpcEndPointServiceWhiteListResponse: CreateVpcEndPointServiceWhiteListResponse,
    DescribeInstanceJumboResponse: DescribeInstanceJumboResponse,
    DescribeIpGeolocationDatabaseUrlResponse: DescribeIpGeolocationDatabaseUrlResponse,
    DescribeNatGatewaySourceIpTranslationNatRulesResponse: DescribeNatGatewaySourceIpTranslationNatRulesResponse,
    DescribeVpcsRequest: DescribeVpcsRequest,
    AcceptAttachCcnInstancesRequest: AcceptAttachCcnInstancesRequest,
    CreateNetworkAclQuintupleEntriesResponse: CreateNetworkAclQuintupleEntriesResponse,
    DescribeGatewayFlowMonitorDetailResponse: DescribeGatewayFlowMonitorDetailResponse,
    IpGeolocationInfo: IpGeolocationInfo,
    DeleteFlowLogRequest: DeleteFlowLogRequest,
    NetDetectState: NetDetectState,
    DescribeSnapshotFilesRequest: DescribeSnapshotFilesRequest,
    HaVipDisassociateAddressIpResponse: HaVipDisassociateAddressIpResponse,
    DescribeTaskResultRequest: DescribeTaskResultRequest,
    ModifyAddressInternetChargeTypeResponse: ModifyAddressInternetChargeTypeResponse,
    CreateRoutePolicyResponse: CreateRoutePolicyResponse,
    ModifyIPv6AddressesBandwidthRequest: ModifyIPv6AddressesBandwidthRequest,
    DeleteVpcEndPointServiceResponse: DeleteVpcEndPointServiceResponse,
    ModifyNetworkAclQuintupleEntriesResponse: ModifyNetworkAclQuintupleEntriesResponse,
    AssignIpv6CidrBlockRequest: AssignIpv6CidrBlockRequest,
    CreateSecurityGroupPoliciesResponse: CreateSecurityGroupPoliciesResponse,
    UnassignIpv6CidrBlockResponse: UnassignIpv6CidrBlockResponse,
    ModifyVpnGatewayRoutesRequest: ModifyVpnGatewayRoutesRequest,
    HaVipAssociateAddressIpRequest: HaVipAssociateAddressIpRequest,
    DisassociateNatGatewayAddressResponse: DisassociateNatGatewayAddressResponse,
    DeleteRoutesResponse: DeleteRoutesResponse,
    DescribeCrossBorderComplianceRequest: DescribeCrossBorderComplianceRequest,
    DescribeSecurityGroupAssociationStatisticsResponse: DescribeSecurityGroupAssociationStatisticsResponse,
    ModifyAssistantCidrResponse: ModifyAssistantCidrResponse,
    CidrForCcn: CidrForCcn,
    NatGatewayAddress: NatGatewayAddress,
    DescribeVpcEndPointServiceResponse: DescribeVpcEndPointServiceResponse,
    ModifyNetworkAclEntriesResponse: ModifyNetworkAclEntriesResponse,
    ModifyVpcEndPointAttributeResponse: ModifyVpcEndPointAttributeResponse,
    DescribeFlowLogRequest: DescribeFlowLogRequest,
    DescribeIp6AddressesRequest: DescribeIp6AddressesRequest,
    CreateRoutePolicyRequest: CreateRoutePolicyRequest,
    DescribeAccountAttributesRequest: DescribeAccountAttributesRequest,
    DescribeAccountAttributesResponse: DescribeAccountAttributesResponse,
    ModifyAddressesRenewFlagRequest: ModifyAddressesRenewFlagRequest,
    AssignPrivateIpAddressesResponse: AssignPrivateIpAddressesResponse,
    DescribeSecurityGroupsRequest: DescribeSecurityGroupsRequest,
    RefreshDirectConnectGatewayRouteToNatGatewayRequest: RefreshDirectConnectGatewayRouteToNatGatewayRequest,
    DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest: DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest,
    ReturnNormalAddressesRequest: ReturnNormalAddressesRequest,
    ModifyNetworkAclAttributeResponse: ModifyNetworkAclAttributeResponse,
    ReplaceRoutePolicyEntriesResponse: ReplaceRoutePolicyEntriesResponse,
    AddBandwidthPackageResourcesResponse: AddBandwidthPackageResourcesResponse,
    DisassociateNetworkAclSubnetsResponse: DisassociateNetworkAclSubnetsResponse,
    SetCcnRegionBandwidthLimitsRequest: SetCcnRegionBandwidthLimitsRequest,
    ModifyAddressInternetChargeTypeRequest: ModifyAddressInternetChargeTypeRequest,
    ModifyIp6AddressesBandwidthRequest: ModifyIp6AddressesBandwidthRequest,
    CreateLocalGatewayRequest: CreateLocalGatewayRequest,
    DescribeDirectConnectGatewaysResponse: DescribeDirectConnectGatewaysResponse,
    CreateVpnGatewayRoutesRequest: CreateVpnGatewayRoutesRequest,
    CreateSecurityGroupWithPoliciesResponse: CreateSecurityGroupWithPoliciesResponse,
    DeleteAddressTemplateResponse: DeleteAddressTemplateResponse,
    ResumeSnapshotInstanceResponse: ResumeSnapshotInstanceResponse,
    ModifySubnetAttributeResponse: ModifySubnetAttributeResponse,
    ResetNatGatewayConnectionRequest: ResetNatGatewayConnectionRequest,
    ModifyCcnAttachedInstancesAttributeRequest: ModifyCcnAttachedInstancesAttributeRequest,
    DeleteAddressTemplateRequest: DeleteAddressTemplateRequest,
    CreateNatGatewaySourceIpTranslationNatRuleRequest: CreateNatGatewaySourceIpTranslationNatRuleRequest,
    NetworkInterface: NetworkInterface,
    TransformAddressRequest: TransformAddressRequest,
    ReplaceDirectConnectGatewayCcnRoutesRequest: ReplaceDirectConnectGatewayCcnRoutesRequest,
    DescribeRoutePolicyEntriesResponse: DescribeRoutePolicyEntriesResponse,
    ModifyAddressTemplateAttributeRequest: ModifyAddressTemplateAttributeRequest,
    ModifyRoutePolicyAttributeRequest: ModifyRoutePolicyAttributeRequest,
    CreateNatGatewayResponse: CreateNatGatewayResponse,
    ResetRoutePolicyAssociationsRequest: ResetRoutePolicyAssociationsRequest,
    DescribeVpcsResponse: DescribeVpcsResponse,
    ModifySecurityGroupAttributeRequest: ModifySecurityGroupAttributeRequest,
    ModifyNetDetectRequest: ModifyNetDetectRequest,
    DescribeSgSnapshotFileContentResponse: DescribeSgSnapshotFileContentResponse,
    DescribeNetDetectStatesResponse: DescribeNetDetectStatesResponse,
    DescribeVpcResourceDashboardResponse: DescribeVpcResourceDashboardResponse,
    AllocateIp6AddressesBandwidthResponse: AllocateIp6AddressesBandwidthResponse,
    DescribeNetDetectStatesRequest: DescribeNetDetectStatesRequest,
    DescribeFlowLogResponse: DescribeFlowLogResponse,
    DeleteRoutePolicyEntriesResponse: DeleteRoutePolicyEntriesResponse,
    DescribeBandwidthPackagesRequest: DescribeBandwidthPackagesRequest,
    DeleteDirectConnectGatewayCcnRoutesResponse: DeleteDirectConnectGatewayCcnRoutesResponse,
    DescribeAssistantCidrResponse: DescribeAssistantCidrResponse,
    BackupPolicy: BackupPolicy,
    IpAddressStates: IpAddressStates,
    InstanceStatistic: InstanceStatistic,
    InternetPriceDetail: InternetPriceDetail,
    CreateVpnConnectionRequest: CreateVpnConnectionRequest,
    CcnRoute: CcnRoute,
    ModifyIpv6AddressesAttributeResponse: ModifyIpv6AddressesAttributeResponse,
    DescribeTrafficPackagesRequest: DescribeTrafficPackagesRequest,
    DeleteSecurityGroupPoliciesRequest: DeleteSecurityGroupPoliciesRequest,
    VpnConnection: VpnConnection,
    DescribeCcnsRequest: DescribeCcnsRequest,
    ModifyNatGatewayAttributeResponse: ModifyNatGatewayAttributeResponse,
    DescribeNetDetectsRequest: DescribeNetDetectsRequest,
    CreateAddressTemplateGroupRequest: CreateAddressTemplateGroupRequest,
    AssociateIPv6AddressRequest: AssociateIPv6AddressRequest,
    DescribeCustomerGatewayVendorsResponse: DescribeCustomerGatewayVendorsResponse,
    DeleteSubnetResponse: DeleteSubnetResponse,
    EnableSnapshotPoliciesResponse: EnableSnapshotPoliciesResponse,
    Vpc: Vpc,
    CreateVpnGatewayResponse: CreateVpnGatewayResponse,
    DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse: DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse,
    FlowLogStorage: FlowLogStorage,
    DeleteRoutePolicyResponse: DeleteRoutePolicyResponse,
    DescribeVpcIpv6AddressesResponse: DescribeVpcIpv6AddressesResponse,
    RejectAttachCcnInstancesRequest: RejectAttachCcnInstancesRequest,
    ModifyCcnRegionBandwidthLimitsTypeRequest: ModifyCcnRegionBandwidthLimitsTypeRequest,
    VpnGatewayRoute: VpnGatewayRoute,
    DescribeVpcResourceDashboardRequest: DescribeVpcResourceDashboardRequest,
    VpcTaskResultDetailInfo: VpcTaskResultDetailInfo,
    ReplaceRouteTableAssociationRequest: ReplaceRouteTableAssociationRequest,
    AssociateNetworkAclSubnetsRequest: AssociateNetworkAclSubnetsRequest,
    ResetRoutePolicyEntriesResponse: ResetRoutePolicyEntriesResponse,
    CheckAssistantCidrRequest: CheckAssistantCidrRequest,
    RenewVpnGatewayRequest: RenewVpnGatewayRequest,
    AssociateIPv6AddressResponse: AssociateIPv6AddressResponse,
    DescribeSnapshotPoliciesRequest: DescribeSnapshotPoliciesRequest,
    DeleteTrafficPackagesRequest: DeleteTrafficPackagesRequest,
    NotifyRoutesRequest: NotifyRoutesRequest,
    DeleteVpcRequest: DeleteVpcRequest,
    ModifyServiceTemplateAttributeResponse: ModifyServiceTemplateAttributeResponse,
    DescribeCcnsResponse: DescribeCcnsResponse,
    CreateSubnetResponse: CreateSubnetResponse,
    DescribeSecurityGroupPoliciesResponse: DescribeSecurityGroupPoliciesResponse,
    DescribeGatewayFlowQosResponse: DescribeGatewayFlowQosResponse,
    ModifySecurityGroupPoliciesRequest: ModifySecurityGroupPoliciesRequest,
    NatGateway: NatGateway,
    ReplaceRoutesRequest: ReplaceRoutesRequest,
    CreateCustomerGatewayResponse: CreateCustomerGatewayResponse,
    TrafficPackage: TrafficPackage,
    WithdrawNotifyRoutesRequest: WithdrawNotifyRoutesRequest,
    ResourceDashboard: ResourceDashboard,
    DescribeSubnetResourceDashboardRequest: DescribeSubnetResourceDashboardRequest,
    CreateRoutePolicyEntriesRequest: CreateRoutePolicyEntriesRequest,
    DeleteServiceTemplateGroupResponse: DeleteServiceTemplateGroupResponse,
    DisassociateAddressRequest: DisassociateAddressRequest,
    NetworkAclEntrySet: NetworkAclEntrySet,
    DeleteVpnConnectionResponse: DeleteVpnConnectionResponse,
    ReleaseIPv6AddressesResponse: ReleaseIPv6AddressesResponse,
    DescribeBandwidthPackageResourcesRequest: DescribeBandwidthPackageResourcesRequest,
    EnableCcnRoutesRequest: EnableCcnRoutesRequest,
    Tag: Tag,
    CreateFlowLogResponse: CreateFlowLogResponse,
    DefaultVpcSubnet: DefaultVpcSubnet,
    CreateSubnetsResponse: CreateSubnetsResponse,
    DescribeGatewayFlowMonitorDetailRequest: DescribeGatewayFlowMonitorDetailRequest,
    FilterObject: FilterObject,
    ModifyBandwidthPackageAttributeResponse: ModifyBandwidthPackageAttributeResponse,
    DetachNetworkInterfaceResponse: DetachNetworkInterfaceResponse,
    DisassociateIPv6AddressRequest: DisassociateIPv6AddressRequest,
    ResetRoutesResponse: ResetRoutesResponse,
    DeleteNetworkAclRequest: DeleteNetworkAclRequest,
    NatGatewayDestinationIpPortTranslationNatRule: NatGatewayDestinationIpPortTranslationNatRule,
    CloneSecurityGroupResponse: CloneSecurityGroupResponse,
    CreateVpnConnectionResponse: CreateVpnConnectionResponse,
    AddressTemplateSpecification: AddressTemplateSpecification,
    VpcIpv6Address: VpcIpv6Address,
    AssignIpv6AddressesRequest: AssignIpv6AddressesRequest,
    CreateServiceTemplateGroupResponse: CreateServiceTemplateGroupResponse,
    NetDetect: NetDetect,
    VpnGatewayRouteModify: VpnGatewayRouteModify,
    DisableSnapshotPoliciesRequest: DisableSnapshotPoliciesRequest,
    MemberInfo: MemberInfo,
    ResumeSnapshotInstanceRequest: ResumeSnapshotInstanceRequest,
    ReplaceSecurityGroupPolicyRequest: ReplaceSecurityGroupPolicyRequest,
    ModifyVpcEndPointServiceAttributeResponse: ModifyVpcEndPointServiceAttributeResponse,
    DescribeReserveIpAddressesResponse: DescribeReserveIpAddressesResponse,
    DescribeSnapshotFilesResponse: DescribeSnapshotFilesResponse,
    DescribeCcnAttachedInstancesResponse: DescribeCcnAttachedInstancesResponse,
    HaVipAssociateAddressIpResponse: HaVipAssociateAddressIpResponse,
    DeleteCustomerGatewayResponse: DeleteCustomerGatewayResponse,
    CreateVpnGatewayRoutesResponse: CreateVpnGatewayRoutesResponse,
    CreateNetDetectRequest: CreateNetDetectRequest,
    CreateAddressTemplateResponse: CreateAddressTemplateResponse,
    CreateNatGatewayDestinationIpPortTranslationNatRuleResponse: CreateNatGatewayDestinationIpPortTranslationNatRuleResponse,
    DeleteAddressTemplateGroupRequest: DeleteAddressTemplateGroupRequest,
    DescribeNetworkInterfaceLimitRequest: DescribeNetworkInterfaceLimitRequest,
    CreateBandwidthPackageRequest: CreateBandwidthPackageRequest,
    DescribeIp6AddressesResponse: DescribeIp6AddressesResponse,
    ModifyRouteTableAttributeRequest: ModifyRouteTableAttributeRequest,
    ModifyDirectConnectGatewayAttributeResponse: ModifyDirectConnectGatewayAttributeResponse,
    DescribeVpnGatewaysRequest: DescribeVpnGatewaysRequest,
    DescribeInstanceJumboRequest: DescribeInstanceJumboRequest,
    NetDetectIpState: NetDetectIpState,
    InternetPrice: InternetPrice,
    ModifyIp6AddressesBandwidthResponse: ModifyIp6AddressesBandwidthResponse,
    CreateSubnetsRequest: CreateSubnetsRequest,
    DescribeVpcEndPointServiceRequest: DescribeVpcEndPointServiceRequest,
    DisableSnapshotPoliciesResponse: DisableSnapshotPoliciesResponse,
    AssociateAddressResponse: AssociateAddressResponse,
    ModifyCcnAttachedInstancesAttributeResponse: ModifyCcnAttachedInstancesAttributeResponse,
    UnassignIpv6SubnetCidrBlockRequest: UnassignIpv6SubnetCidrBlockRequest,
    CreateNetworkAclRequest: CreateNetworkAclRequest,
    DescribeAddressesRequest: DescribeAddressesRequest,
    DescribeSecurityGroupPoliciesRequest: DescribeSecurityGroupPoliciesRequest,
    ModifyNetworkInterfaceAttributeResponse: ModifyNetworkInterfaceAttributeResponse,
    InquiryPriceRenewAddressesRequest: InquiryPriceRenewAddressesRequest,
    CreateSecurityGroupResponse: CreateSecurityGroupResponse,
    DisassociateNetworkInterfaceSecurityGroupsResponse: DisassociateNetworkInterfaceSecurityGroupsResponse,
    ModifyGatewayFlowQosRequest: ModifyGatewayFlowQosRequest,
    DescribeNetworkInterfaceLimitResponse: DescribeNetworkInterfaceLimitResponse,
    AssignIpv6CidrBlockResponse: AssignIpv6CidrBlockResponse,
    CreateCcnRequest: CreateCcnRequest,
    DeleteTemplateMemberResponse: DeleteTemplateMemberResponse,
    DescribeIpGeolocationDatabaseUrlRequest: DescribeIpGeolocationDatabaseUrlRequest,
    DescribeVpcEndPointResponse: DescribeVpcEndPointResponse,
    DescribeNetworkAclQuintupleEntriesRequest: DescribeNetworkAclQuintupleEntriesRequest,
    DescribeSnapshotPoliciesResponse: DescribeSnapshotPoliciesResponse,
    EnableRoutesResponse: EnableRoutesResponse,
    ModifyRoutePolicyAttributeResponse: ModifyRoutePolicyAttributeResponse,
    DeleteVpnConnectionRequest: DeleteVpnConnectionRequest,
    NetworkAclEntry: NetworkAclEntry,
    DescribeAssistantCidrRequest: DescribeAssistantCidrRequest,
    RenewVpnGatewayResponse: RenewVpnGatewayResponse,
    DeleteDirectConnectGatewayResponse: DeleteDirectConnectGatewayResponse,
    DescribeIPv6AddressesRequest: DescribeIPv6AddressesRequest,
    ResetVpnGatewayInternetMaxBandwidthRequest: ResetVpnGatewayInternetMaxBandwidthRequest,
    EndPoint: EndPoint,
    DirectConnectGateway: DirectConnectGateway,
    Price: Price,
    HaVipDisassociateAddressIpRequest: HaVipDisassociateAddressIpRequest,
    ReturnNormalAddressesResponse: ReturnNormalAddressesResponse,
    DisableFlowLogsResponse: DisableFlowLogsResponse,
    DescribeBandwidthPackageResourcesResponse: DescribeBandwidthPackageResourcesResponse,
    DescribeCrossBorderComplianceResponse: DescribeCrossBorderComplianceResponse,
    ModifyVpnGatewayAttributeResponse: ModifyVpnGatewayAttributeResponse,
    AllocateIPv6AddressesRequest: AllocateIPv6AddressesRequest,
    AssociateDirectConnectGatewayNatGatewayResponse: AssociateDirectConnectGatewayNatGatewayResponse,
    EndPointService: EndPointService,
    ResetRoutePolicyAssociationsResponse: ResetRoutePolicyAssociationsResponse,
    DescribeVpnGatewayCcnRoutesRequest: DescribeVpnGatewayCcnRoutesRequest,
    DisassociateDirectConnectGatewayNatGatewayResponse: DisassociateDirectConnectGatewayNatGatewayResponse,
    CreateServiceTemplateGroupRequest: CreateServiceTemplateGroupRequest,
    CreateNetworkAclQuintupleEntriesRequest: CreateNetworkAclQuintupleEntriesRequest,
    DescribeDirectConnectGatewayCcnRoutesRequest: DescribeDirectConnectGatewayCcnRoutesRequest,
    DescribeClassicLinkInstancesResponse: DescribeClassicLinkInstancesResponse,
    DeleteReserveIpAddressesRequest: DeleteReserveIpAddressesRequest,
    DescribeVpnGatewayCcnRoutesResponse: DescribeVpnGatewayCcnRoutesResponse,
    DetachCcnInstancesRequest: DetachCcnInstancesRequest,
    ModifyVpcEndPointServiceWhiteListRequest: ModifyVpcEndPointServiceWhiteListRequest,
    MigrateNetworkInterfaceResponse: MigrateNetworkInterfaceResponse,
    DescribeSnapshotAttachedInstancesRequest: DescribeSnapshotAttachedInstancesRequest,
    CreateNatGatewaySourceIpTranslationNatRuleResponse: CreateNatGatewaySourceIpTranslationNatRuleResponse,
    DeleteNatGatewaySourceIpTranslationNatRuleResponse: DeleteNatGatewaySourceIpTranslationNatRuleResponse,
    CcnAttachedInstance: CcnAttachedInstance,
    SecurityPolicyDatabase: SecurityPolicyDatabase,
    InquiryPriceModifyAddressesBandwidthRequest: InquiryPriceModifyAddressesBandwidthRequest,
    CreateVpcEndPointServiceRequest: CreateVpcEndPointServiceRequest,
    Ipv6Address: Ipv6Address,
    CreateNetworkInterfaceRequest: CreateNetworkInterfaceRequest,
    BandwidthPackageBillBandwidth: BandwidthPackageBillBandwidth,
    DeleteHaVipResponse: DeleteHaVipResponse,
    DescribeFlowLogsResponse: DescribeFlowLogsResponse,
    VpcPrivateIpAddress: VpcPrivateIpAddress,
    CvmInstance: CvmInstance,
    DescribeNetworkAclsRequest: DescribeNetworkAclsRequest,
    DescribeNetworkAclQuintupleEntriesResponse: DescribeNetworkAclQuintupleEntriesResponse,
    DescribeSubnetsRequest: DescribeSubnetsRequest,
    CreateSubnetRequest: CreateSubnetRequest,
    AddressTemplateGroup: AddressTemplateGroup,
    DownloadCustomerGatewayConfigurationRequest: DownloadCustomerGatewayConfigurationRequest,
    DeleteBandwidthPackageRequest: DeleteBandwidthPackageRequest,
    HaVip: HaVip,
    ModifyAddressesBandwidthResponse: ModifyAddressesBandwidthResponse,
    LocalGateway: LocalGateway,
    RejectAttachCcnInstancesResponse: RejectAttachCcnInstancesResponse,
    SetCcnRegionBandwidthLimitsResponse: SetCcnRegionBandwidthLimitsResponse,
    ModifySnapshotPoliciesResponse: ModifySnapshotPoliciesResponse,
    ResetRoutePolicyEntriesRequest: ResetRoutePolicyEntriesRequest,
    InquiryPriceRenewAddressesResponse: InquiryPriceRenewAddressesResponse,
    DeleteRoutePolicyAssociationsResponse: DeleteRoutePolicyAssociationsResponse,
    CreateRoutePolicyAssociationsRequest: CreateRoutePolicyAssociationsRequest,
    RoutePolicy: RoutePolicy,
    DescribeCcnRoutesRequest: DescribeCcnRoutesRequest,
    GenerateVpnConnectionDefaultHealthCheckIpResponse: GenerateVpnConnectionDefaultHealthCheckIpResponse,
    CreateAndAttachNetworkInterfaceRequest: CreateAndAttachNetworkInterfaceRequest,
    DeleteVpcEndPointResponse: DeleteVpcEndPointResponse,
    DeleteNetDetectResponse: DeleteNetDetectResponse,
    AllocateAddressesRequest: AllocateAddressesRequest,
    CreateReserveIpAddressesRequest: CreateReserveIpAddressesRequest,
    ModifyVpnConnectionAttributeRequest: ModifyVpnConnectionAttributeRequest,
    UnassignIpv6CidrBlockRequest: UnassignIpv6CidrBlockRequest,
    ModifyAssistantCidrRequest: ModifyAssistantCidrRequest,
    CreateReserveIpAddressesResponse: CreateReserveIpAddressesResponse,
    ModifyGatewayFlowQosResponse: ModifyGatewayFlowQosResponse,
    ModifySecurityGroupAttributeResponse: ModifySecurityGroupAttributeResponse,
    AssociateDirectConnectGatewayNatGatewayRequest: AssociateDirectConnectGatewayNatGatewayRequest,
    AddressTemplateItem: AddressTemplateItem,
    ModifyAddressAttributeResponse: ModifyAddressAttributeResponse,
    AttachClassicLinkVpcRequest: AttachClassicLinkVpcRequest,
    GatewayFlowMonitorDetail: GatewayFlowMonitorDetail,
    ResetVpnConnectionResponse: ResetVpnConnectionResponse,
    ModifyAddressesRenewFlagResponse: ModifyAddressesRenewFlagResponse,
    Subnet: Subnet,
    DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse: DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse,
    DeleteVpnGatewayRequest: DeleteVpnGatewayRequest,
    ReplaceRouteTableAssociationResponse: ReplaceRouteTableAssociationResponse,
    AttachCcnInstancesRequest: AttachCcnInstancesRequest,
    ModifyBandwidthPackageBandwidthResponse: ModifyBandwidthPackageBandwidthResponse,
    DeleteRoutePolicyAssociationsRequest: DeleteRoutePolicyAssociationsRequest,
    CcnInstance: CcnInstance,
    DescribeLocalGatewayResponse: DescribeLocalGatewayResponse,
    ItemPrice: ItemPrice,
    DeleteNatGatewayRequest: DeleteNatGatewayRequest,
    ModifyCustomerGatewayAttributeResponse: ModifyCustomerGatewayAttributeResponse,
    ConflictItem: ConflictItem,
    InquiryPriceRenewVpnGatewayResponse: InquiryPriceRenewVpnGatewayResponse,
    AssignIpv6SubnetCidrBlockResponse: AssignIpv6SubnetCidrBlockResponse,
    CreateVpcEndPointResponse: CreateVpcEndPointResponse,
    DeleteAssistantCidrResponse: DeleteAssistantCidrResponse,
    DescribeCcnRegionBandwidthLimitsResponse: DescribeCcnRegionBandwidthLimitsResponse,
    ModifyTemplateMemberRequest: ModifyTemplateMemberRequest,
    EnableSnapshotPoliciesRequest: EnableSnapshotPoliciesRequest,
    DescribeAddressesResponse: DescribeAddressesResponse,
    GatewayQos: GatewayQos,
    GetCcnRegionBandwidthLimitsRequest: GetCcnRegionBandwidthLimitsRequest,
    ModifyIpv6AddressesAttributeRequest: ModifyIpv6AddressesAttributeRequest,
    DescribeCustomerGatewayVendorsRequest: DescribeCustomerGatewayVendorsRequest,
    DetachSnapshotInstancesRequest: DetachSnapshotInstancesRequest,
    DeleteLocalGatewayRequest: DeleteLocalGatewayRequest,
    ResetVpnGatewayInternetMaxBandwidthResponse: ResetVpnGatewayInternetMaxBandwidthResponse,
    AddressChargePrepaid: AddressChargePrepaid,
    DescribeVpnGatewayRoutesResponse: DescribeVpnGatewayRoutesResponse,
    DescribeNetworkAclsResponse: DescribeNetworkAclsResponse,
    DescribeNatGatewayDirectConnectGatewayRouteRequest: DescribeNatGatewayDirectConnectGatewayRouteRequest,
    DeleteFlowLogResponse: DeleteFlowLogResponse,
    AttachCcnInstancesResponse: AttachCcnInstancesResponse,
    CreateDefaultVpcResponse: CreateDefaultVpcResponse,
    ModifyVpcAttributeResponse: ModifyVpcAttributeResponse,
    ModifyVpnConnectionAttributeResponse: ModifyVpnConnectionAttributeResponse,
    PrivateIpAddressSpecification: PrivateIpAddressSpecification,
    AlgType: AlgType,
    MigratePrivateIpAddressResponse: MigratePrivateIpAddressResponse,
    DescribeUsedIpAddressRequest: DescribeUsedIpAddressRequest,
    DeleteRouteTableResponse: DeleteRouteTableResponse,
    DescribeVpcInstancesResponse: DescribeVpcInstancesResponse,
    AccountAttribute: AccountAttribute,
    AllocateIPv6AddressesResponse: AllocateIPv6AddressesResponse,
    DeleteSnapshotPoliciesRequest: DeleteSnapshotPoliciesRequest,
    DeleteDirectConnectGatewayCcnRoutesRequest: DeleteDirectConnectGatewayCcnRoutesRequest,
    ModifyNatGatewaySourceIpTranslationNatRuleResponse: ModifyNatGatewaySourceIpTranslationNatRuleResponse,
    CreateNatGatewayDestinationIpPortTranslationNatRuleRequest: CreateNatGatewayDestinationIpPortTranslationNatRuleRequest,
    CreateFlowLogRequest: CreateFlowLogRequest,
    InquirePriceCreateDirectConnectGatewayRequest: InquirePriceCreateDirectConnectGatewayRequest,
    AttachNetworkInterfaceResponse: AttachNetworkInterfaceResponse,
    DisassociateNatGatewayAddressRequest: DisassociateNatGatewayAddressRequest,
    DescribeTrafficPackagesResponse: DescribeTrafficPackagesResponse,
    DescribeServiceTemplatesResponse: DescribeServiceTemplatesResponse,
    DescribeRouteTablesRequest: DescribeRouteTablesRequest,
    ResetAttachCcnInstancesRequest: ResetAttachCcnInstancesRequest,
    CreateHaVipResponse: CreateHaVipResponse,
    DescribeSecurityGroupReferencesRequest: DescribeSecurityGroupReferencesRequest,
    DescribeVpcPrivateIpAddressesResponse: DescribeVpcPrivateIpAddressesResponse,
    ModifyReserveIpAddressRequest: ModifyReserveIpAddressRequest,
    ISPIPv6CidrBlock: ISPIPv6CidrBlock,
    DisableRoutesRequest: DisableRoutesRequest,
    DisassociateDirectConnectGatewayNatGatewayRequest: DisassociateDirectConnectGatewayNatGatewayRequest,
    ReleaseIPv6AddressesRequest: ReleaseIPv6AddressesRequest,
    DisassociateIPv6AddressResponse: DisassociateIPv6AddressResponse,
    DescribeAddressTemplateGroupsResponse: DescribeAddressTemplateGroupsResponse,
    ReleaseAddressesRequest: ReleaseAddressesRequest,
    CreateDirectConnectGatewayCcnRoutesRequest: CreateDirectConnectGatewayCcnRoutesRequest,
    CreateDirectConnectGatewayCcnRoutesResponse: CreateDirectConnectGatewayCcnRoutesResponse,
    CreateRouteTableRequest: CreateRouteTableRequest,
    MigrateNetworkInterfaceRequest: MigrateNetworkInterfaceRequest,
    DescribeCustomerGatewaysRequest: DescribeCustomerGatewaysRequest,
    DisableRoutesResponse: DisableRoutesResponse,
    ModifySnapshotPoliciesRequest: ModifySnapshotPoliciesRequest,
    ModifyAddressAttributeRequest: ModifyAddressAttributeRequest,
    DeleteAssistantCidrRequest: DeleteAssistantCidrRequest,
    ModifyVpcEndPointServiceWhiteListResponse: ModifyVpcEndPointServiceWhiteListResponse,
    SubnetInput: SubnetInput,
    DescribeNatGatewayDirectConnectGatewayRouteResponse: DescribeNatGatewayDirectConnectGatewayRouteResponse,
    EnableVpcEndPointConnectResponse: EnableVpcEndPointConnectResponse,
    CreateNetDetectResponse: CreateNetDetectResponse,
    InquiryPriceAllocateAddressesResponse: InquiryPriceAllocateAddressesResponse,
    DeleteCcnRequest: DeleteCcnRequest,
    ModifyLocalGatewayResponse: ModifyLocalGatewayResponse,
    AssociateNetworkInterfaceSecurityGroupsResponse: AssociateNetworkInterfaceSecurityGroupsResponse,
    EnableFlowLogsRequest: EnableFlowLogsRequest,
    ModifyVpnGatewayAttributeRequest: ModifyVpnGatewayAttributeRequest,
    CreateNatGatewayRequest: CreateNatGatewayRequest,
    DeleteNetDetectRequest: DeleteNetDetectRequest,
    IPSECOptionsSpecification: IPSECOptionsSpecification,
    CreateSnapshotPoliciesRequest: CreateSnapshotPoliciesRequest,
    UnassignIpv6AddressesRequest: UnassignIpv6AddressesRequest,
    CreateAndAttachNetworkInterfaceResponse: CreateAndAttachNetworkInterfaceResponse,
    ModifyCcnAttributeRequest: ModifyCcnAttributeRequest,
    ResourceStatistics: ResourceStatistics,
    DeleteSecurityGroupPoliciesResponse: DeleteSecurityGroupPoliciesResponse,
    CreateVpcEndPointServiceResponse: CreateVpcEndPointServiceResponse,
    ModifyNetworkAclAttributeRequest: ModifyNetworkAclAttributeRequest,
    SetVpnGatewaysRenewFlagResponse: SetVpnGatewaysRenewFlagResponse,
    DeleteVpnGatewayResponse: DeleteVpnGatewayResponse,
    DescribeHaVipsRequest: DescribeHaVipsRequest,
    SnapshotPolicy: SnapshotPolicy,
    InquiryPriceModifyAddressesBandwidthResponse: InquiryPriceModifyAddressesBandwidthResponse,
    UnassignPrivateIpAddressesResponse: UnassignPrivateIpAddressesResponse,
    Address: Address,
    VpnGateway: VpnGateway,
    ModifyAddressesBandwidthRequest: ModifyAddressesBandwidthRequest,
    EnableVpcEndPointConnectRequest: EnableVpcEndPointConnectRequest,
    EnableGatewayFlowMonitorResponse: EnableGatewayFlowMonitorResponse,
    Resource: Resource,
    CustomerGateway: CustomerGateway,
    AllocateAddressesResponse: AllocateAddressesResponse,
    DescribeVpnConnectionsResponse: DescribeVpnConnectionsResponse,
    BandwidthPackage: BandwidthPackage,
    ModifyVpcAttributeRequest: ModifyVpcAttributeRequest,
    ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest: ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest,
    CreateSecurityGroupPoliciesRequest: CreateSecurityGroupPoliciesRequest,
    ModifyVpnGatewayRoutesResponse: ModifyVpnGatewayRoutesResponse,
    ModifyRouteTableAttributeResponse: ModifyRouteTableAttributeResponse,
    ModifyIPv6AddressesBandwidthResponse: ModifyIPv6AddressesBandwidthResponse,
    DescribeSecurityGroupReferencesResponse: DescribeSecurityGroupReferencesResponse,
    DisableGatewayFlowMonitorRequest: DisableGatewayFlowMonitorRequest,
    CreateAddressTemplateGroupResponse: CreateAddressTemplateGroupResponse,
    DescribeBandwidthPackageQuotaResponse: DescribeBandwidthPackageQuotaResponse,
    DeleteServiceTemplateGroupRequest: DeleteServiceTemplateGroupRequest,
    DeleteNatGatewayResponse: DeleteNatGatewayResponse,
    AdjustPublicAddressRequest: AdjustPublicAddressRequest,
    CreateDirectConnectGatewayResponse: CreateDirectConnectGatewayResponse,
    ModifyVpcEndPointAttributeRequest: ModifyVpcEndPointAttributeRequest,
    ModifyBandwidthPackageBandwidthRequest: ModifyBandwidthPackageBandwidthRequest,
    DescribeTaskResultResponse: DescribeTaskResultResponse,
    DisassociateNetworkAclSubnetsRequest: DisassociateNetworkAclSubnetsRequest,
    ModifyAddressTemplateGroupAttributeRequest: ModifyAddressTemplateGroupAttributeRequest,
    ModifyServiceTemplateGroupAttributeRequest: ModifyServiceTemplateGroupAttributeRequest,
    DeleteVpcEndPointRequest: DeleteVpcEndPointRequest,
    InquiryPriceAllocateAddressesRequest: InquiryPriceAllocateAddressesRequest,
    CCN: CCN,
    NetworkAclQuintupleEntry: NetworkAclQuintupleEntry,
    InquirePriceCreateDirectConnectGatewayResponse: InquirePriceCreateDirectConnectGatewayResponse,
    AdjustPublicAddressResponse: AdjustPublicAddressResponse,
    RemoveBandwidthPackageResourcesResponse: RemoveBandwidthPackageResourcesResponse,
    DestinationIpPortTranslationNatRule: DestinationIpPortTranslationNatRule,
    CheckNetDetectStateResponse: CheckNetDetectStateResponse,
    CreateDefaultVpcRequest: CreateDefaultVpcRequest,
    DescribeSubnetsResponse: DescribeSubnetsResponse,
    DescribeCustomerGatewaysResponse: DescribeCustomerGatewaysResponse,
    CheckAssistantCidrResponse: CheckAssistantCidrResponse,
    DescribeVpcTaskResultResponse: DescribeVpcTaskResultResponse,
    InquiryPriceRenewVpnGatewayRequest: InquiryPriceRenewVpnGatewayRequest,
    EnableCcnRoutesResponse: EnableCcnRoutesResponse,
    ModifyVpnGatewayCcnRoutesResponse: ModifyVpnGatewayCcnRoutesResponse,
    DetachCcnInstancesResponse: DetachCcnInstancesResponse,
    ModifyServiceTemplateGroupAttributeResponse: ModifyServiceTemplateGroupAttributeResponse,
    DeleteNetworkAclQuintupleEntriesRequest: DeleteNetworkAclQuintupleEntriesRequest,
    DeleteSubnetRequest: DeleteSubnetRequest,
    DescribeAddressTemplateGroupsRequest: DescribeAddressTemplateGroupsRequest,
    DeleteRoutePolicyRequest: DeleteRoutePolicyRequest,
    DisassociateVpcEndPointSecurityGroupsResponse: DisassociateVpcEndPointSecurityGroupsResponse,
    DeleteSnapshotPoliciesResponse: DeleteSnapshotPoliciesResponse,
    AssociateNatGatewayAddressResponse: AssociateNatGatewayAddressResponse,
    RemoveBandwidthPackageResourcesRequest: RemoveBandwidthPackageResourcesRequest,
    VpngwCcnRoutes: VpngwCcnRoutes,
    RouteTable: RouteTable,
    DeleteNetworkInterfaceRequest: DeleteNetworkInterfaceRequest,
    InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse: InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse,
    DescribeVpcEndPointServiceWhiteListRequest: DescribeVpcEndPointServiceWhiteListRequest,
    DeleteAddressTemplateGroupResponse: DeleteAddressTemplateGroupResponse,
    ReplaceRoutesResponse: ReplaceRoutesResponse,
    ModifyLocalGatewayRequest: ModifyLocalGatewayRequest,
    DirectConnectGatewayCcnRoute: DirectConnectGatewayCcnRoute,
    DeleteHaVipRequest: DeleteHaVipRequest,
    CreateLocalGatewayResponse: CreateLocalGatewayResponse,
    ServicesInfo: ServicesInfo,
    MigratePrivateIpAddressRequest: MigratePrivateIpAddressRequest,
    DescribeServiceTemplatesRequest: DescribeServiceTemplatesRequest,
    DescribeSnapshotAttachedInstancesResponse: DescribeSnapshotAttachedInstancesResponse,
    RefreshDirectConnectGatewayRouteToNatGatewayResponse: RefreshDirectConnectGatewayRouteToNatGatewayResponse,
    DeleteReserveIpAddressesResponse: DeleteReserveIpAddressesResponse,
    DeleteRouteTableRequest: DeleteRouteTableRequest,
    SnapshotInstance: SnapshotInstance,
    CreateVpnGatewayRequest: CreateVpnGatewayRequest,
    DescribeVpcInstancesRequest: DescribeVpcInstancesRequest,
    DeleteVpcEndPointServiceWhiteListResponse: DeleteVpcEndPointServiceWhiteListResponse,
    DescribeSgSnapshotFileContentRequest: DescribeSgSnapshotFileContentRequest,
    CreateBandwidthPackageResponse: CreateBandwidthPackageResponse,
    ResetVpnConnectionRequest: ResetVpnConnectionRequest,
    ReleaseAddressesResponse: ReleaseAddressesResponse,
    AuditCrossBorderComplianceResponse: AuditCrossBorderComplianceResponse,
    InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest: InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest,
    DisableFlowLogsRequest: DisableFlowLogsRequest,
    ReplaceSecurityGroupPolicyResponse: ReplaceSecurityGroupPolicyResponse,
    EnableGatewayFlowMonitorRequest: EnableGatewayFlowMonitorRequest,
    ModifyPrivateIpAddressesAttributeResponse: ModifyPrivateIpAddressesAttributeResponse,
    ModifyHaVipAttributeResponse: ModifyHaVipAttributeResponse,
    CcnBandwidthInfo: CcnBandwidthInfo,
    DeleteSecurityGroupResponse: DeleteSecurityGroupResponse,
    DescribeReserveIpAddressesRequest: DescribeReserveIpAddressesRequest,
    DescribeAddressQuotaRequest: DescribeAddressQuotaRequest,
    BatchModifySnapshotPolicy: BatchModifySnapshotPolicy,
    AssignIpv6AddressesResponse: AssignIpv6AddressesResponse,
    CreateRoutesResponse: CreateRoutesResponse,
    DescribeSecurityGroupsResponse: DescribeSecurityGroupsResponse,
    CreateVpcEndPointServiceWhiteListRequest: CreateVpcEndPointServiceWhiteListRequest,
    DeleteNatGatewaySourceIpTranslationNatRuleRequest: DeleteNatGatewaySourceIpTranslationNatRuleRequest,
    ModifyVpnGatewayCcnRoutesRequest: ModifyVpnGatewayCcnRoutesRequest,
    DescribeGatewayFlowQosRequest: DescribeGatewayFlowQosRequest,
    ReplaceDirectConnectGatewayCcnRoutesResponse: ReplaceDirectConnectGatewayCcnRoutesResponse,
    DownloadCustomerGatewayConfigurationResponse: DownloadCustomerGatewayConfigurationResponse,
    ModifySecurityGroupPoliciesResponse: ModifySecurityGroupPoliciesResponse,
    ServiceTemplateSpecification: ServiceTemplateSpecification,
    DetachNetworkInterfaceRequest: DetachNetworkInterfaceRequest,
    ModifyIPv6AddressesAttributesRequest: ModifyIPv6AddressesAttributesRequest,
    ReserveIpAddressInfo: ReserveIpAddressInfo,
    AttachClassicLinkVpcResponse: AttachClassicLinkVpcResponse,
    CreateAddressTemplateRequest: CreateAddressTemplateRequest,
    DescribeNatGatewaysResponse: DescribeNatGatewaysResponse,
    NatDirectConnectGatewayRoute: NatDirectConnectGatewayRoute,
    NetworkAclQuintupleEntries: NetworkAclQuintupleEntries,
    AttachNetworkInterfaceRequest: AttachNetworkInterfaceRequest,
    DescribeCcnRoutesResponse: DescribeCcnRoutesResponse,
    AllocateIp6AddressesBandwidthRequest: AllocateIp6AddressesBandwidthRequest,
    SecurityGroup: SecurityGroup,
    DisableGatewayFlowMonitorResponse: DisableGatewayFlowMonitorResponse,
    DisassociateAddressResponse: DisassociateAddressResponse,
    DirectConnectSubnet: DirectConnectSubnet,
    DescribeVpnGatewayRoutesRequest: DescribeVpnGatewayRoutesRequest,
    GetCcnRegionBandwidthLimitsResponse: GetCcnRegionBandwidthLimitsResponse,
    DeleteRoutesRequest: DeleteRoutesRequest,
    AssociateAddressRequest: AssociateAddressRequest,
    CcnRegionBandwidthLimit: CcnRegionBandwidthLimit,
    DescribeRoutePolicyEntriesRequest: DescribeRoutePolicyEntriesRequest,
    VpcEndPointServiceUser: VpcEndPointServiceUser,
    ClassicLinkInstance: ClassicLinkInstance,
    DeleteLocalGatewayResponse: DeleteLocalGatewayResponse,
    NetworkInterfaceAttachment: NetworkInterfaceAttachment,
    SnapshotFileInfo: SnapshotFileInfo,
    ModifyNetworkInterfaceAttributeRequest: ModifyNetworkInterfaceAttributeRequest,
    ModifyHaVipAttributeRequest: ModifyHaVipAttributeRequest,
    ModifyAddressTemplateGroupAttributeResponse: ModifyAddressTemplateGroupAttributeResponse,
    DetachClassicLinkVpcResponse: DetachClassicLinkVpcResponse,
    UnassignPrivateIpAddressesRequest: UnassignPrivateIpAddressesRequest,
    DeleteVpnGatewayRoutesRequest: DeleteVpnGatewayRoutesRequest,
    Filter: Filter,
    ModifyNetDetectResponse: ModifyNetDetectResponse,
    CreateHaVipRequest: CreateHaVipRequest,
    Ipv6SubnetCidrBlock: Ipv6SubnetCidrBlock,
    EnableFlowLogsResponse: EnableFlowLogsResponse,
    DescribeAddressQuotaResponse: DescribeAddressQuotaResponse,
    CreateCustomerGatewayRequest: CreateCustomerGatewayRequest,
    DeleteSecurityGroupRequest: DeleteSecurityGroupRequest,
    CrossBorderCompliance: CrossBorderCompliance,
    CreateRouteTableResponse: CreateRouteTableResponse,
    CreateRoutePolicyEntriesResponse: CreateRoutePolicyEntriesResponse,
    DeleteDirectConnectGatewayRequest: DeleteDirectConnectGatewayRequest,
    DescribeDirectConnectGatewayCcnRoutesResponse: DescribeDirectConnectGatewayCcnRoutesResponse,
    ModifyPrivateIpAddressesAttributeRequest: ModifyPrivateIpAddressesAttributeRequest,
    ResetNatGatewayConnectionResponse: ResetNatGatewayConnectionResponse,
    AssociateNetworkInterfaceSecurityGroupsRequest: AssociateNetworkInterfaceSecurityGroupsRequest,
    DeleteVpnGatewayRoutesResponse: DeleteVpnGatewayRoutesResponse,
    CreateSecurityGroupRequest: CreateSecurityGroupRequest,
    ModifyCcnAttributeResponse: ModifyCcnAttributeResponse,
    RoutePolicyAssociation: RoutePolicyAssociation,
    DescribeClassicLinkInstancesRequest: DescribeClassicLinkInstancesRequest,
    ReleaseIp6AddressesBandwidthRequest: ReleaseIp6AddressesBandwidthRequest,
    CreateServiceTemplateResponse: CreateServiceTemplateResponse,
    DeleteNetworkInterfaceResponse: DeleteNetworkInterfaceResponse,
    DisableCcnRoutesResponse: DisableCcnRoutesResponse,
    DescribeCcnRegionBandwidthLimitsRequest: DescribeCcnRegionBandwidthLimitsRequest,
    ModifyReserveIpAddressResponse: ModifyReserveIpAddressResponse,
    CreateAssistantCidrResponse: CreateAssistantCidrResponse,
    CustomerGatewayVendor: CustomerGatewayVendor,
    DescribeAddressTemplatesRequest: DescribeAddressTemplatesRequest,
    ConflictSource: ConflictSource,
    EnableRoutesRequest: EnableRoutesRequest,
    DeleteTrafficPackagesResponse: DeleteTrafficPackagesResponse,
    DeleteCustomerGatewayRequest: DeleteCustomerGatewayRequest,
    DescribeAddressTemplatesResponse: DescribeAddressTemplatesResponse,
    Quota: Quota,
    WithdrawNotifyRoutesResponse: WithdrawNotifyRoutesResponse,
    ModifyIPv6AddressesAttributesResponse: ModifyIPv6AddressesAttributesResponse,
    DescribeNetworkInterfacesResponse: DescribeNetworkInterfacesResponse,
    DeleteNetworkAclResponse: DeleteNetworkAclResponse,
    DeleteNetworkAclQuintupleEntriesResponse: DeleteNetworkAclQuintupleEntriesResponse,
    DescribeServiceTemplateGroupsRequest: DescribeServiceTemplateGroupsRequest,
    CreateSecurityGroupWithPoliciesRequest: CreateSecurityGroupWithPoliciesRequest,
    CreateVpcRequest: CreateVpcRequest,
    DescribeSubnetResourceDashboardResponse: DescribeSubnetResourceDashboardResponse,
    DeleteServiceTemplateRequest: DeleteServiceTemplateRequest,
    DescribeSecurityGroupAssociationStatisticsRequest: DescribeSecurityGroupAssociationStatisticsRequest,
    NotifyRoutesResponse: NotifyRoutesResponse,
    Route: Route,
    ModifySubnetAttributeRequest: ModifySubnetAttributeRequest,
    DescribeBandwidthPackageQuotaRequest: DescribeBandwidthPackageQuotaRequest,
    DeleteVpcResponse: DeleteVpcResponse,
    InstanceChargePrepaid: InstanceChargePrepaid,
    CreateRoutePolicyAssociationsResponse: CreateRoutePolicyAssociationsResponse,
    AddTemplateMemberRequest: AddTemplateMemberRequest,
    DescribeVpcEndPointServiceWhiteListResponse: DescribeVpcEndPointServiceWhiteListResponse,
    AcceptAttachCcnInstancesResponse: AcceptAttachCcnInstancesResponse,
    DescribeUsedIpAddressResponse: DescribeUsedIpAddressResponse,
    AddressInfo: AddressInfo,
    AuditCrossBorderComplianceRequest: AuditCrossBorderComplianceRequest,
    DescribeNetDetectsResponse: DescribeNetDetectsResponse,

}
